166

2次元配列の列数を指定して、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配列にインデックスを付けることができることは理解していますが、それは私が持っているコードのオプションではありません-この変換を行う必要があります。)

4

10 に答える 10

238

reshape配列にしたい。

B = np.reshape(A, (-1, 2))

ここ-1で、入力配列のサイズから新しい次元のサイズを推測します。

于 2012-09-25T02:27:24.127 に答える
52

2つのオプションがあります。

  • 元の形状が不要になった場合は、配列に新しい形状を割り当てるのが最も簡単です。

    a.shape = (a.size//ncols, ncols)
    

    a.size//ncolsbyを切り替えると-1、適切な形状が自動的に計算されます。確認してくださいa.shape[0]*a.shape[1]=a.size。そうしないと、問題が発生します。

  • 関数を使用して新しい配列を取得できます。これは、np.reshape上記のバージョンとほぼ同じように機能します。

    new = np.reshape(a, (-1, ncols))
    

    可能な場合newは、初期配列のビューのみになりますa。つまり、データが共有されます。ただし、場合によっては、new代わりに配列がコピーになります。行優先のC順序から列優先のFortran順序に切り替えることができるnp.reshapeオプションのキーワードも受け入れることに注意してください。メソッドの関数バージョンです。ordernp.reshapea.reshape

要件を尊重できない場合はa.shape[0]*a.shape[1]=a.size、新しい配列を作成する必要があります。この関数を使用して、次のようnp.resizeに混合することができます。np.reshape

>>> a =np.arange(9)
>>> np.resize(a, 10).reshape(5,2)
于 2012-09-25T08:03:46.123 に答える
12

次のようなものを試してください:

B = np.reshape(A,(-1,ncols))

ただし、配列内の要素の数を割り切れることを確認する必要がありますncols。キーワードをB使用して数字が引き出される順序で遊ぶこともできます。order

于 2012-09-25T04:19:41.417 に答える
0
some_array.shape = (1,)+some_array.shape

または新しいものを入手する

another_array = numpy.reshape(some_array, (1,)+some_array.shape)

これにより、寸法が +1 になり、最も外側にブラケットを追加するのと同じになります。

于 2020-04-18T02:27:20.460 に答える