我有一个numpy数组,' a',形状(52,)。当我做[0] .shape时,我得到(8,8,6)。如何修改' a'让a.shape等于(52,8,8,6)?
我尝试过重塑数组,但未能获得所需的形状。
答案 0 :(得分:0)
听起来你有一个dtype object
的NumPy数组,它包含52个形状数组(8,8,6):
import numpy as np
a = np.empty(52, dtype='O')
a[:] = [np.random.random((8,8,6)) for i in range(52)]
这样
In [38]: a.shape
Out[38]: (52,)
In [39]: a[0].shape
Out[39]: (8, 8, 6)
假设所有52个数组具有相同的形状和dtype,您可以使用np.fromiter
和生成器表达式将其转换为形状数组(52,8,8,6)以展平值:
b = (np.fromiter(
(val for arr in a for val in arr.ravel()),
count=(a.size)*(a[0].size), dtype=a[0].dtype)
.reshape(a.shape+a[0].shape))
In [40]: b.shape
Out[40]: (52, 8, 8, 6)
请注意,在数字dtype - not object
dtype的数组上执行时,NumPy数值运算要快得多。理想情况下,您希望首先避免创建数组a
。您可能最好不要使用np.fromiter
来重新定义a
的代码,以便从一开始就构建所需的形状数组(52,8,8,6)。