4

是否有任何内置的 numpy 函数可以获得:

a=np.asarray([[[1,2],[3,4]],[[1,2],[3,4]]])

并会返回:

b=[[1,2],[3,4],[1,2],[3,4]]

? 像一层展平之类的东西。

PS我正在寻找一个矢量化选项,否则这个愚蠢的代码是可用的:

flat1D(a):
   b=np.array([])
   for item in a:
      b=np.append(b,item)
   return b
4

2 回答 2

9

您可以简单地重塑数组。

>>> a.reshape(-1,a.shape[-1])
array([[1, 2],
       [3, 4],
       [1, 2],
       [3, 4]])

显示的代码返回一维数组,以执行此操作:

>>> a.ravel()
array([1, 2, 3, 4, 1, 2, 3, 4])

或者,如果您确定要复制数组:

>>> a.flatten()
array([1, 2, 3, 4, 1, 2, 3, 4])

ravel 和 flatten 之间的区别主要来自这样一个事实,即 flatten 将始终返回一个副本,而 ravel 如果可能会返回一个视图,如果没有则返回一个副本。

于 2013-10-25T21:23:51.450 回答
0

如果您知道新数组的维度,则可以将它们指定为元组(4,2)并使用.reshape()

a.reshape((4,2))
于 2018-01-11T15:19:31.980 回答