numpy结构化数组不一致



我正在编写一个使用NumPy数组的库,我想对任何数据类型执行标量操作。这适用于大多数结构化数组,但在为结构化元素创建具有多个维度的结构化数组时,我遇到了一个问题。例如,

x = np.zeros(10, np.dtype('3float32,int8'))
print(x.dtype)
print(x.shape)

显示

[('f0', '<f4', (3,)), ('f1', 'i1')]
(10,)

但是

x = np.zeros(10, np.dtype('3float32'))
print(x.dtype)
print(x.shape)

产生

float32
(10, 3)

也就是说,创建一个具有单个多维字段的结构化数组似乎会扩展数组形状。这意味着最后一个例子的维数是2,而不是我所期望的1。这里有我遗漏的东西吗,或者有一个已知的解决方法吗?

使用与第一个工作示例中显示的相同的dtype表示法:

In [92]: x = np.zeros(3, np.dtype([('f0','<f4',(3,))]))
In [93]: x
Out[93]: 
array([([0., 0., 0.],), ([0., 0., 0.],), ([0., 0., 0.],)],
dtype=[('f0', '<f4', (3,))])

我通常不使用字符串简写,

In [99]: np.dtype('3float32')
Out[99]: dtype(('<f4', (3,)))     # no field name assigned
In [100]: np.zeros(3,_)
Out[100]: 
array([[0., 0., 0.],
[0., 0., 0.],
[0., 0., 0.]], dtype=float32)

几个逗号分隔的字符串创建命名字段:

In [102]: np.dtype('3float32,i4')
Out[102]: dtype([('f0', '<f4', (3,)), ('f1', '<i4')])

最新更新