176

配列があるとしますa:

a = np.array([[1,2,3], [4,5,6]])

array([[1, 2, 3],
       [4, 5, 6]])

それを 1D 配列 (つまり、列ベクトル) に変換したいと思います。

b = np.reshape(a, (1,np.product(a.shape)))

しかし、これは戻ります

array([[1, 2, 3, 4, 5, 6]])

これは次と同じではありません:

array([1, 2, 3, 4, 5, 6])

この配列の最初の要素を取得して、手動で 1D 配列に変換できます。

b = np.reshape(a, (1,np.product(a.shape)))[0]

ただし、これには、元の配列の次元数を知る必要があります (より高い次元で作業する場合は [0] を連結します)。

任意の ndarray から列/行ベクトルを取得する次元に依存しない方法はありますか?

4

6 に答える 6

335

np.ravel (1D ビューの場合) またはnp.ndarray.flatten (1D コピーの場合) またはnp.ndarray.flat (1D イテレーターの場合) を使用します

In [12]: a = np.array([[1,2,3], [4,5,6]])

In [13]: b = a.ravel()

In [14]: b
Out[14]: array([1, 2, 3, 4, 5, 6])

可能であればofをravel()返すことに注意してください。したがって、変更すると も変更されます。は、1D 要素がメモリ内で連続している場合は a を返しますが、たとえば、単位ではないステップ サイズ (例: ) を使用して別の配列をスライスして作成された場合は、a を返します。viewabaravel()viewcopyaa = x[::2]

ビューではなくコピーが必要な場合は、

In [15]: c = a.flatten()

イテレータだけが必要な場合は、次を使用しますnp.ndarray.flat

In [20]: d = a.flat

In [21]: d
Out[21]: <numpy.flatiter object at 0x8ec2068>

In [22]: list(d)
Out[22]: [1, 2, 3, 4, 5, 6]
于 2012-12-05T19:01:14.270 に答える
29
In [14]: b = np.reshape(a, (np.product(a.shape),))

In [15]: b
Out[15]: array([1, 2, 3, 4, 5, 6])

または、単に:

In [16]: a.flatten()
Out[16]: array([1, 2, 3, 4, 5, 6])
于 2012-12-05T19:01:45.827 に答える
3

最も簡単な方法の 1 つは、次のflatten()例のように を使用することです。

 import numpy as np

 batch_y =train_output.iloc[sample, :]
 batch_y = np.array(batch_y).flatten()

私の配列は次のようでした:

    0
0   6
1   6
2   5
3   4
4   3
.
.
.

使用後flatten()

array([6, 6, 5, ..., 5, 3, 6])

これは、このタイプのエラーの解決策でもあります。

Cannot feed value of shape (100, 1) for Tensor 'input/Y:0', which has shape '(?,)' 
于 2019-05-16T19:17:04.343 に答える