lightsonさんの回答と、追記文を読んでようやく質問の意図と、つまづいているところ理解しました。
##誤解の解消
まずは、lightsonさんの仰るとおり、printで単純に出力しているようですが、入力して値を結果を確認してみてください。
python
1import numpy as np
2my_array = np.ones((3, 4))
3print(repr(my_array))
結果は次のようになります。
array([[ 1., 1., 1., 1.],
[ 1., 1., 1., 1.],
[ 1., 1., 1., 1.]])
このように、numpyのarrayとして出力することが可能です。
iPythonなどのインタプリタでやる場合は
>>> import numpy as np
>>> my_array = np.ones((3, 4))
>>> my_array
と入力すれば同じ結果が得られます。つまり、ここで言いたいことは、値を確認するときに print で出力しているため、変数に格納された値を誤解しているのではないでしょうか、ということです。
ゆえに、出力された値が「カンマ区切りだから・・・うんぬん」ということは気にしなくても良いでしょう。
##本題の解決方法
誤解の指摘はこの辺にしておいて、現在達成されたいことは追記分を踏まえると
「numpyで生成した2次元配列を分割したい」
ということだとして話を勧めます。
まずは、当所の質問にあるデータを準備します。ただ、説明の便宜上、値を変えておきます。
import numpy as np
my_array = np.array([[0, 1], [2, 3]])
ここで用意したmy_array
から[0, 1]
と[2, 3]
を切り分けたい、とのことでしたので、幾つかのパターンで紹介したいと思います。
パターン1: 非常にシンプルに分ける場合
2x2の行列のみしか扱わないのであれば、次のようにやるのが最もシンプルでしょう。
my_array[0] # array([0, 1]) を返す
my_array[1] # array([2, 3]) を返す
パターン2: numpy.vsplitで均等に分割する
result_array = np.vsplit(my_array, 2) # [array([[0, 1]]), array([[2, 3]])]
result_array[0] # array([0, 1]) を返す
result_array[1] # array([2, 3]) を返す
解説を付け加えておくと、m行ある行列(ここではdata
とすると)をn等分する場合、次のようになります。
python
1np.data(data, n) # dataはm行ある行列
この時、m
はn
で割り切れる必要があります。
lightsonさんの回答のコメントにあるような以下の様なコードではエラーが出ます。
my_array = np.ones((3, 4)) # 3行4列の行列
np.vsplit(my_array,2) # 3行の行列を2等分できないためエラー
このとき、エラーメッセージとして
ValueError: array split does not result in an equal division
が出力されたのではないでしょうか。
パターン3: vsplitで不均等に分割する
例えば、10行の行列を 2, 3, 6 というように分割したいときは次のようにします。
my_array = np.ones((10, 4)) # 10行4列の行列
np.vsplit(my_array, [2, 5]) # 長いので結果は略
vsplit
の第二引数をlist
または``tuple```で指定すると、第二引数の値の位置で分割をしてくれます。つまり、次のような違いがあります。
my_array = np.ones((10, 4))
np.vsplit(my_array, 2) # 第二引数が int なので、my_arrayを2分割
np.vsplit(my_array, [2]) # 第二引数が list なので、my_arrayを0-2, 2-10で分割
np.vsplit(my_array, (2,)) # 第二引数がtuple なので、my_arrayを0-2, 2-10で分割
といった具合になります。行だけでなく列も自由に調整したいといことでしたら、numpy.split
を使用すると良いでしょう。
見返してみると長々と書いてしまいました。とりあえず、七夕が近いので、この記事がどこかの誰かのためになりますように^^
参考