Python numpy形状:重新排列轴以获得所需格式
我有一个形状为(52,)的numpy数组“a”。当我做[0]形状时,我得到(8,8,6)。如何修改“a”以使a.shape等于(52,8,8,6)Python numpy形状:重新排列轴以获得所需格式,python,arrays,numpy,indexing,shape,Python,Arrays,Numpy,Indexing,Shape,我有一个形状为(52,)的numpy数组“a”。当我做[0]形状时,我得到(8,8,6)。如何修改“a”以使a.shape等于(52,8,8,6) 我已尝试重新调整数组的形状,但未能获得所需的形状。听起来您有一个数据类型对象的NumPy数组,其中包含52个形状数组(8,8,6): 所以 In [38]: a.shape Out[38]: (52,) In [39]: a[0].shape Out[39]: (8, 8, 6) 假设所有52个数组具有相同的形状和数据类型,可以使用np.from
我已尝试重新调整数组的形状,但未能获得所需的形状。听起来您有一个数据类型
对象的NumPy数组,其中包含52个形状数组(8,8,6):
所以
In [38]: a.shape
Out[38]: (52,)
In [39]: a[0].shape
Out[39]: (8, 8, 6)
假设所有52个数组具有相同的形状和数据类型,可以使用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))
请注意,当对数值数据类型--非对象
dtype的数组执行NumPy数值操作时,速度要快得多。因此,理想情况下,首先要避免创建数组a
。与其使用np.fromiter
,您最好重新编写定义a
的代码,以便从一开始就构建所需的形状数组(52,8,8,6)。我认为您做不到<代码>重塑
要求数组的总大小保持不变,将(52,)
调整为(52,8,8,6)
有效地扩展数组的8*8*6
维度。重点是什么<代码>重塑可将9元素阵列转换为3x3 2D阵列。您所说的听起来像是要将数组[0]复制到数组的扩展版本中。请给出一个最小的代码示例,该示例可以生成具有奇异形状的numpy数组。
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)