0
我有一个函数(MyFunct(X)
),取决于的X
值,将返回要么三维numpy的阵列(例如np.ones((5,2,3))
一个空数组(np.array([])
)。建立一个不断增长的3D numpy的阵列
RetVal = MyFunct(X) # RetVal can be np.array([]) or np.ones((5,2,3))
NB我使用np.ones((5,2,3))
的方式来生成假数据 - 在现实中的将RetVal的内容是所有整数
MyFunct
被称为有各色范围的。 nt X值,其中一些会导致返回一个空数组,而另一些则不会。
我想创建一个新的3D numpy阵列(OUT
)这是一个n
由所有返回值从MyFunct()
的2 3连接数组。这个问题试图连接一个3D数组,而一个空列表导致一个异常(可以理解!),而不是默默无闻地做任何事情。有多种方法解决此问题:
- 明确检查是否
RetVal
为空,然后使用np.concatenate()
- 使用try/except块和捕获异常
- 每个值添加到列表,然后交通过删除空条目来处理
但是,这些都让人觉得难看。有没有一种有效/快速的方法来“正确”做到这一点?
通过串联成长阵列是非常昂贵的,因为每个级联操作迫使你生成整个数组的新副本。随着阵列越来越大,这变得越来越慢。总的来说,最好是1)分配一个比你想象的数组大的数组,并且随着行数的增加填充行,或者2)在列表中收集子数组,并且在一个步骤中执行所有的级联。 –
'np.zeros((0,2,3))'与np.array([])'一样空,并且与'(n,2,3)'数组更兼容。 – hpaulj
谢谢 - 列表追加后跟串联对性能产生巨大影响(显然它应该!) – Alex