我有一个函数(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的内容都是整数。
MyFunct
,其中一些值会导致返回空数组而其他数据不会返回。
我想创建一个新的3D numpy数组(OUT
),它是来自n
的所有返回值的MyFunct()
乘2 x 3连接数组。这个问题试图连接一个3D数组,一个空列表导致一个异常(可以理解!),而不是只是默默地不做任何事情。有很多方法可以解决这个问题:
RetVal
是否为空,然后使用np.concatenate()
但这些都让人觉得难看。有没有一种有效/快速的方法来正确地做到这一点'?
答案 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)