0

我有一个 5 元组列表的数据。前两个是整数索引i, j,接下来三个是浮点数xyz

data = [(1, 2, 3.141, 1.414, 2.718), 
        (3, 4, 1.111, 2.222, 3.333),
        (0, 0, 0.000, 0.000, 0.000)]

听说我可以做类似的事情

dt    = [('ij', 'int', 2), ('xyz', 'float', 3)]

struct_array = np.array(data, dtype=dt)

所以我可以将数组的最后三列作为二维浮点数组访问。例如得到 r = sqrt(x^2 + y^2 + z^2) 我应该可以说

r = np.sqrt(((struct_array['xyz']**2).sum(axis=1)))

并得到结果

array([4.38780139, 4.15698136, 0.        ])

同样的方式

normal_array = np.array(data)

r = np.sqrt(((array[:, 2:]**2).sum(axis=1)))

但我尝试过的一切都会导致错误消息

ValueError:无法将长度为 5 的元组分配给具有 2 个字段的结构。

我查看了https://docs.scipy.org/doc/numpy/user/basics.rec.html但如果我的尝试失败的答案在那里,我没有看到它。

4

1 回答 1

1

对于结构的两个元素,您必须将数据打包到 2 个元组中:

struct_array = np.array([((e[0],e[1]), (e[2],e[3],e[4])) for e in data], dtype=dt)
np.sqrt(((struct_array['xyz']**2).sum(axis=1)))

结果

array([4.38780139, 4.15698136, 0.        ])
于 2019-12-02T09:47:30.210 回答