import numpy as np
arr = np.array([(1,2), (3,4)], dtype=[('c1', float), ('c2', float)])
arr += 3
导致无效的类型升级错误。有没有办法像结构化数组那样具有漂亮的标记列,但仍然能够像简单的dtype=float
数组那样进行操作?
或者,有一种简单的方法可以将dtype=float
数组转换为结构化数组吗?即
arr = np.array([(1,2), (3,4)], dtype=float)
arr_struc = arr.astype([('c1', float), ('c2', float)])
仅在不广播并且将列与名称匹配的情况下。似乎我不必执行此循环:
arr_struc = np.zeros(2, dtype=[('c1', float), ('c2', float)])
for i,key in enumerate(arr_struc.dtype.names): arr_struc[key] = arr[i,:]
答案 0 :(得分:2)
嗯。一种选择,为此使用视图:
width:fit-content
不是最干净的。但这是一个解决方案。
编辑:
是的,不要使用>>> import numpy as np
>>> arr = np.array([(1,2), (3,4)], dtype=[('c1', float), ('c2', float)])
>>> view = arr.view(float)
>>> view += 3
>>> arr
array([(4., 5.), (6., 7.)], dtype=[('c1', '<f8'), ('c2', '<f8')])
>>> view
array([4., 5., 6., 7.])
再次使用视图:
astype
您可能需要根据自己的喜好重塑它:
>>> arr = np.array([(1,2), (3,4)], dtype=float)
>>> arr
array([[1., 2.],
[3., 4.]])
>>> struct = arr.view(dtype=[('c1', float), ('c2', float)])
>>> struct
array([[(1., 2.)],
[(3., 4.)]], dtype=[('c1', '<f8'), ('c2', '<f8')])
>>> struct.shape
(2, 1)