numpyで1D配列を2D配列に変換します


118

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

回答:


163

reshape配列したい。

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

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


44

次の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配列が代わりにコピーになります。np.reshapeは、order行優先のC順序から列優先のFortran順序に切り替えることができるオプションのキーワードも受け入れることに注意してください。メソッドの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)

9

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

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

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


4

1次元配列Xを2次元配列に変換することだけが目的の場合は、次のようにします。

X = np.reshape(X,(1, X.size))

0
import numpy as np
array = np.arange(8) 
print("Original array : \n", array)
array = np.arange(8).reshape(2, 4)
print("New array : \n", array)

1
コードとともに説明を含めることをお勧めします。
シド

np.reshapeを使用する、今の回答が以前の回答と上記の他の回答とどのように異なるかを説明できますか?
StupidWolf

0
some_array.shape = (1,)+some_array.shape

または新しいものを入手

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

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


-1

flatten()numpyパッケージから使用できます。

import numpy as np
a = np.array([[1, 2],
       [3, 4],
       [5, 6]])
a_flat = a.flatten()
print(f"original array: {a} \nflattened array = {a_flat}")

出力:

original array: [[1 2]
 [3 4]
 [5 6]] 
flattened array = [1 2 3 4 5 6]

AttributeError: module 'numpy' has no attribute 'flatten'
ジェイミーF

1
コードを共有していただけませんか?numpyのは確かに持っているのでflatten:メソッドdocs.scipy.org/doc/numpy/reference/generated/...
ラフィー

-2

Numpyを使用せずに1D配列を2D配列に変更します。

l = [i for i in range(1,21)]
part = 3
new = []
start, end = 0, part


while end <= len(l):
    temp = []
    for i in range(start, end):
        temp.append(l[i])
    new.append(temp)
    start += part
    end += part
print("new values:  ", new)


# for uneven cases
temp = []
while start < len(l):
    temp.append(l[start])
    start += 1
    new.append(temp)
print("new values for uneven cases:   ", new)
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.