numpy shape:重新排列轴以获得所需的格式

时间:2015-03-07 13:32:06

标签: python arrays numpy indexing shape

我有一个numpy数组,' a',形状(52,)。当我做[0] .shape时,我得到(8,8,6)。如何修改' a'让a.shape等于(52,8,8,6)?

我尝试过重塑数组,但未能获得所需的形状。

1 个答案:

答案 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)。