matplotlib でヒストグラムをプロットしようとしています。1 行の 2D 配列を変換する必要があります
[[1,2,3,4]] # shape is (1,4)
1D配列に
[1,2,3,4] # shape is (4,)
これどうやってするの?
matplotlib でヒストグラムをプロットしようとしています。1 行の 2D 配列を変換する必要があります
[[1,2,3,4]] # shape is (1,4)
1D配列に
[1,2,3,4] # shape is (4,)
これどうやってするの?
列に直接インデックスを付けることができます:
>>> import numpy as np
>>> x2 = np.array([[1,2,3,4]])
>>> x2.shape
(1, 4)
>>> x1 = x2[0,:]
>>> x1
array([1, 2, 3, 4])
>>> x1.shape
(4,)
または、 `squeeze`を使用できます:
>>> xs = np.squeeze(x2)
>>> xs
array([1, 2, 3, 4])
>>> xs.shape
(4,)
mtrw が提供する答えは、実際にはこのような 1 行しかない配列のトリックを行いますが、2 次元の値を持つ 2 次元配列がある場合は、次のように変換できます。
a = np.array([[1,2,3],[4,5,6]])
ここから、 で配列の形状を見つけ、これnp.shape
との積を見つけるとnp.product
、要素の数が得られます。np.reshape()
要素の総数の1つの長さに配列を再形成するために使用すると、常に機能するソリューションが得られます。
np.reshape(a, np.product(a.shape))
>>> array([1, 2, 3, 4, 5, 6])
Use numpy.flat
import numpy as np
import matplotlib.pyplot as plt
a = np.array([[1,0,0,1],
[2,0,1,0]])
plt.hist(a.flat, [0,1,2,3])
The flat
property returns a 1D iterator over your 2D array. This method generalizes to any number of rows (or dimensions). For large arrays it can be much more efficient than making a flattened copy.