将ND阵列合并为单个阵列和列表

时间:2012-09-18 07:00:00

标签: python arrays numpy

我拥有的是:

x = array([a, a, a, a, a, a],
          [b, b, b, b, b, b],
          [................],
          [z,z,z,z,z,z,z,z,])

我正在寻找一种方式:

我。如何将这个数组转换为一维数组x =数组[a,a,a,a,a,a,a,a,b,b,b,b,b,..,z,z,z]和a 1D列表x = [a,a,a,a,a,a,a,b,b,b,b,b,...,z,z,z]。

II。计算这个数组的确切维数:我尝试了len(x [0])和len(x)来获得两个维度坐标,但这种方式看起来有点像hackish。是否有任何内置函数来获取数组的尺寸?

注意:一些数组值是正整数,有些是浮点数,有些是负浮点数,有些是负整数。

非常感谢提前。

4 个答案:

答案 0 :(得分:2)

我使用np.ravel执行此任务 如果你想要输出,只需调用列表构造函数 .shape将分别为您提供行数和列数,但实际上您并不需要了解它们。

>>> import numpy as np
>>> a = np.random.random_integers(0, 9, (3, 4))
>>> a.shape
(3, 4)
>>> print a
[[9 5 1 8]
 [3 1 3 1]
 [3 9 6 6]]
>>> a.ravel()
array([9, 5, 1, 8, 3, 1, 3, 1, 3, 9, 6, 6])
>>> list(a.ravel())
[9, 5, 1, 8, 3, 1, 3, 1, 3, 9, 6, 6]

答案 1 :(得分:1)

要从ND阵列创建一维数组,请使用ndarray.flatten()

x = array([a, a, a, a, a, a],
      [b, b, b, b, b, b],
      [................],
      [z,z,z,z,z,z,z,z,])
x.flatten()

要从中获取列表,请使用ndarray.tolist()

xlist = x.tolist()

要获取数组的尺寸,请使用ndarray.shape

print x.shape
(4, 6)

答案 2 :(得分:1)

  • 要将2D数组转换为1D数组,可以使用np.ravel(a)。如果您想到位,您还可以使用a.shape=-1a.flatten方法将返回初始数组的副本,这很浪费。
  • 要将1D数组转换为列表,您可以使用list(a)a.tolist()。要将2D数组转换为平面列表,到目前为止更简单的是list(a.flat).flat返回'flat'迭代器)。请注意,在2D数组上使用a.tolist将为您提供列表列表,而使用list(a)将为您提供数组列表。
  • 使用a.shape在每个维度上获取a的大小,作为具有与维度一样多的元素的元组。请注意len(a)==a.shape[0]。使用2D数组len(a[0])=a.shape[1]

答案 3 :(得分:0)

将数组合并到一个新数组中:

newArray = array()
for y in x
  newArray += y

找到长度:

len(newArray)