构建一个不断增长的3D numpy阵列

时间:2016-03-04 21:25:18

标签: python arrays numpy

我有一个函数(MyFunct(X)),根据X的值,将返回 一个3D numpy数组(例如np.ones((5,2,3))或空数组(np.array([]))。

RetVal = MyFunct(X) # RetVal can be np.array([]) or np.ones((5,2,3))

NB 我使用np.ones((5,2,3))作为生成虚假数据的方式 - 实际上RetVal的内容都是整数。

使用一系列不同的X值调用

MyFunct,其中一些值会导致返回空数组而其他数据不会返回。

我想创建一个新的3D numpy数组(OUT),它是来自n的所有返回值的MyFunct()乘2 x 3连接数组。这个问题试图连接一个3D数组,一个空列表导致一个异常(可以理解!),而不是只是默默地不做任何事情。有很多方法可以解决这个问题:

  • 明确检查RetVal是否为空,然后使用np.concatenate()
  • 使用try / except块并捕获异常
  • 将每个值添加到列表中,然后通过删除空条目进行后处理

但这些都让人觉得难看。有没有一种有效/快速的方法来正确地做到这一点'?

1 个答案:

答案 0 :(得分:1)

您可以将阵列重塑为兼容的形状:

concatenate([MyFunct(X).reshape((-1,2,3)) for X in values])

示例:

In [2]: def MyFunc(X): return ones((5,2,3)) if X%2 else array([])

In [3]: concatenate([MyFunc(X).reshape((-1,2,3)) for X in range(6)]).shape
Out[3]: (15, 2, 3)