我正在尝试使用 matplotlib 绘制直方图。我需要转换我的单行二维数组
[[1,2,3,4]] # shape is (1,4)
成一维数组
[1,2,3,4] # shape is (4,)
我怎样才能做到这一点?
我正在尝试使用 matplotlib 绘制直方图。我需要转换我的单行二维数组
[[1,2,3,4]] # shape is (1,4)
成一维数组
[1,2,3,4] # shape is (4,)
我怎样才能做到这一点?
添加ravel
作为未来搜索者的另一种选择。从文档中,
它等价于 reshape(-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, :]
您可以直接索引列:
>>> 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,)
或者你可以使用挤压:
>>> xs = np.squeeze(x2)
>>> xs
array([1, 2, 3, 4])
>>> xs.shape
(4,)
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])
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
属性返回二维数组上的一维迭代器。此方法推广到任意数量的行(或维度)。对于大型阵列,它可能比制作扁平副本更有效。