将2D NumPy数组转换为1D数组以绘制直方图

时间:2012-07-31 12:10:30

标签: numpy matplotlib

我正在尝试使用matplotlib绘制直方图。 我需要转换我的单行2D数组

[[1,2,3,4]] # shape is (1,4)

进入1D数组

[1,2,3,4] # shape is (4,)

我该怎么做?

5 个答案:

答案 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)

reshape可以解决问题。

还有一个更具体的功能,flatten,似乎完全符合您的要求。

答案 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)

使用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])

Histogram of Flattened Array

flat属性返回2D数组上的1D迭代器。此方法可推广到任意数量的行(或维度)。对于大型阵列,它可以比制作扁平副本更有效。