2D配列の列数を指定して、1次元配列を2次元配列に変換したい。このように機能するもの:
> import numpy as np
> A = np.array([1,2,3,4,5,6])
> B = vec2matrix(A,ncol=2)
> B
array([[1, 2],
[3, 4],
[5, 6]])
Numpyには、作成した関数「vec2matrix」のように機能する関数がありますか? (2D配列のように1D配列にインデックスを付けることができると理解していますが、これは私が持っているコードのオプションではありません。この変換を行う必要があります。)
reshape
配列にしたい。
B = np.reshape(A, (-1, 2))
次の2つのオプションがあります。
元の形状が不要になった場合、最も簡単な方法は、新しい形状を配列に割り当てることです。
a.shape = (a.size//ncols, ncols)
a.size//ncols
で-1
を切り替えて、適切な形状を自動的に計算できます。 a.shape[0]*a.shape[1]=a.size
以外の場合は、何らかの問題が発生することを確認してください。
np.reshape
関数を使用して新しい配列を取得できます。これは、上記のバージョンとほぼ同様に機能します
new = np.reshape(a, (-1, ncols))
可能であれば、new
は初期配列a
の単なるビューになります。つまり、データは共有されます。ただし、場合によっては、new
配列は代わりにacopyになります。 np.reshape
は、行優先のC順序から列優先のFortran順序に切り替えることができるオプションのキーワードorder
も受け入れることに注意してください。 np.reshape
は、a.reshape
メソッドの関数バージョンです。
要件a.shape[0]*a.shape[1]=a.size
を尊重できない場合、新しい配列を作成する必要があります。 np.resize
関数を使用して、次のようにnp.reshape
と混合できます。
>>> a =np.arange(9)
>>> np.resize(a, 10).reshape(5,2)
次のようなものを試してください:
B = np.reshape(A,(-1,ncols))
ただし、配列内の要素の数をncols
で除算できることを確認する必要があります。また、B
キーワードを使用して、order
に数値が取り込まれる順序で遊ぶこともできます。