我必须以某种方式将结构化数据转换为 numpy 结构化数组形式。我阅读了我能找到的有关该主题的少量(抱歉 SciPy!)草率文档,但仍然一无所获。
基本上我想做这样简单的事情:
import numpy as np
dt = [('contacts', '(2,4)f8'),
('modelname', 'S10')]
arr = np.zeros((2,), dtype=dt)
testdata = [[99, 2, 3, 4], [7, 8, 9, 10]]
arr[0]['contacts'] = np.array(testdata)
arr[0]['modelname'] = 'test'
print arr
然后我希望看到将结构化数组的“联系人”字段设置为所需的内容。
但是,输出是:
[([[99.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0]], 'test')
([[0.0, 0.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0]], '')]
显然只分配了第一个数字。
最佳答案
您以错误的方式为数组编制索引。尝试:
arr['contacts'][0] = np.array(testdata)
也就是说,对于 arr
的 'contacts'
列,将索引在 0
的行设置为您的 testdata
。当您编写 arr[0]
时,您会检索到一个“记录标量”。事实上,如果您检查一下,您会发现 arr[0]
的类型为 numpy.void
。
分配给它不会影响分配给整个记录的内存。相比之下,arr['contacts']
创建 View 并分配给该数组 View 中的 arr['contacts'][0]
会修改原始内存。
我同意 NumPy 文档在这方面可以更清楚...
关于python - 分配给 numpy 结构化数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28431747/