在一个超过200次迭代的循环中,我有一个临时输出temp.shape = (1L, 2L, 128L, 30L, 3L)
。
我想在第五维(temp
)上附加几个3L
矩阵,
总输出为Total.shape = (1L, 2L, 128L, 30L, 600L)
我相信我需要使用np.stack
,但我似乎无法让它正常工作。
例如,我尝试:
Total = np.stack((Total, temp), axis=5)
,
但经过几次迭代后失败了。
答案 0 :(得分:1)
np.stack
在这里不合适,因为它沿 new 轴附加数组。您要找的是np.concatenate
。你可以称之为
total = np.concatenate((total, temp), axis=4)
但是,这实际上效率很低,因为每次调用concatenate
都会创建一个新数组,复制所有内容。所以你会复制大约200次。更好的方法是首先收集列表中的所有temp
数组:
list_of_temps = ... # this contains the 200 (1, 2, 128, 30, 3) arrays
total = np.concatenate(list_of_temps, axis=4)
这样可以避免重复复制数组内容。可能更好的选择是在temp
数组上放置一个生成器而不是列表,以避免创建list_of_temps
。
编辑:这就是它在上下文中的样子:现在说你正在做什么
total = np.empty((1, 2, 128, 30, 0)) # empty array to concatenate to
for ind in range(200):
temp = however_you_get_the_temps()
total = np.concatenate((total, temp), axis=4)
这应该更快:
list_of_temps = []
for ind in range(200):
temp = however_you_get_the_temps()
list_of_temps.append(temp)
total = np.concatenate(list_of_temps, axis=4)
我觉得应该有一种方法可以使用生成器(这可以避免构建列表),但我不得不承认我现在无法运行。