假设我有两个具有相同 dtype 但形状不同的 numpy 数组 x1 和 x2:x1.dtype = dtype([('fmv', '<f4'), ('delta', '<f4'), ('rho', '<f4', (5,))])
x2.dtype = dtype([('fmv', '<f4'), ('delta', '<f4'), ('rho', '<f4', (5,))])
x1.shape = (10L, 1L)
x2.shape = (10L, 6L)
我想在轴 1 上连接这两个数组:
y = np.concatenate((x1,x2), axis=1)
这会导致:
y.shape = (10L, 7L)
好
y['rho'].shape = (5L, 10L, 7L)
坏
为什么 rho 字段的形状被转置了?我期待 (10, 7, 5)
更新:
x1.flags | x2.flags | y.flags C_CONTIGUOUS : 真 | 真 | 错误的 F_CONTIGUOUS : 假 | 假 | 真的 自己的数据:假 | 假 | 错误的 可写:真| 真 | 真的 对齐:真 | 真 | 真的 UPDATEIFCOPY : 错误 | 假 | 错误的
x1.strides = (28L, 28L)
x2.strides = (168L, 28L)
y.strides = (28L, 280L)
我制作了一个小脚本,您可以运行它来复制结果:
import numpy as np
x = np.zeros((5,3), dtype=np.dtype([('field1','<f8'),('field2','<f8',4)]))
A1 = np.concatenate((np.array(x[0,0], ndmin=1), np.ravel(x[:,1:], order='C')), axis=0)
B1 = np.concatenate((np.tile(np.array(A1[0],ndmin=2), (5,1)), np.reshape(A1[1:], (5,2), order='C')), axis=1)
A2 = np.ravel(x, order='C')
B2 = np.reshape(A2, (5,3), order='C')
B1['field2'].shape = (4L, 5L, 3L)
坏
B2['field2'].shape = (5L, 3L, 4L)
好