11

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

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

成一维数组

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

我怎样才能做到这一点?

4

5 回答 5

16

添加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, :]
于 2014-07-21T14:28:40.557 回答
12

您可以直接索引列:

>>> 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,)
于 2012-07-31T12:18:20.083 回答
2

reshape会成功的。

还有一个更具体的功能,flatten它似乎完全可以满足您的需求。

于 2012-07-31T12:13:53.487 回答
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])
于 2014-10-23T13:43:53.820 回答
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])

展平阵列的直方图

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

于 2013-12-24T15:47:50.860 回答