python - 分配给 numpy 结构化数组

标签 python arrays numpy

我必须以某种方式将结构化数据转换为 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/

相关文章:

java - Minecraft Bukkit Java 执行命令时出错

iOS:在 touchesEnded 完成后删除数组中的最后一个图像

python - 如何测试numpy中的所有行是否相等

python - 用 SVD 分解求解线性方程组

python - 抛出名称错误 : name 'pathlib' is not defined with Python 3. 4

PHP 和 Python 集成 : Calling python scripts from PHP page and respond back to it

python - 如何将 pandas DataFrame 保存到 excel 文件?

python - 使用递归在Python 3中的列表列表中查找第二小的int

javascript - 使用 Javascript 的 Codewars 除法 Kata 生成的结果不能被 6 整除

python - python 中的灰化矩阵,包括 NaN