我正在尝试使用matplotlib绘制直方图。 我需要转换我的单行2D数组
[[1,2,3,4]] # shape is (1,4)
进入1D数组
[1,2,3,4] # shape is (4,)
我该怎么做?
答案 0 :(得分:14)
添加ravel
作为未来搜索者的另一种选择。来自文档,
相当于重塑(-1,order = order)。
由于数组是1xN,因此以下所有内容都是等效的:
arr1d = np.ravel(arr2d)
arr1d = arr2d.ravel()
arr1d = arr2d.flatten()
arr1d = np.reshape(arr2d, -1)
arr1d = arr2d.reshape(-1)
arr1d = arr2d[0, :]
答案 1 :(得分:10)
您可以直接索引列:
>>> 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,)
答案 2 :(得分:2)
答案 3 :(得分:2)
mtrw提供的答案为一个实际上只有一行这样的数组做了诀窍,但是如果你有一个二维数组,其值为二维,你可以按如下方式转换它
a = np.array([[1,2,3],[4,5,6]])
从这里你可以找到带np.shape
的数组的形状,并找到np.product
的产品,现在这会产生元素的数量。如果您现在使用np.reshape()
将数组重新整形为元素总数的一个长度,那么您将拥有始终有效的解决方案。
np.reshape(a, np.product(a.shape))
>>> array([1, 2, 3, 4, 5, 6])
答案 4 :(得分:1)
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])
flat
属性返回2D数组上的1D迭代器。此方法可推广到任意数量的行(或维度)。对于大型阵列,它可以比制作扁平副本更有效。