问题标签 [structured-array]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
74 浏览

python - PYTHON:检查和编辑结构化数组中的元素(如果存在)的最快方法是什么?

我对非常大的数据集有一些问题。我需要找到一种可靠且快速的方法来查找/替换结构化数组中的条目。我正在寻找一种不循环所有条目的解决方案。我知道 C 有快速的解决方案,但我不知道如何在 python 中解决这个问题。我也想知道是否有为此目的的 numpy 函数!

我正在使用 Python 2.7.13 和 numpy 1.12.1!

任务:通过从中的中心列表中data_centrals找到孤儿的卤素,将孤儿的 所有位置设置为 的位置。data_orphandata_centrals

已编辑:可以在 此处下载包含 200 个对象的数据子样本!它的结构由dt给出:第一列 --> hostid,第二列 --> z_pos等。它可以复制/粘贴到 python shell 或脚本中......

您可以在下面找到设置位置的代码。

问题:是否有聪明的方法来搜索卤化物并设置位置而不循环所有条目data_orphan

0 投票
2 回答
7836 浏览

python - 从列表创建结构化数组

我有一个简单的元素列表,我正在尝试从中创建一个结构化数组

这种天真的方法失败了:

将每个元素放在一个元组中:

如果我首先从列表中创建一个数组,它也可以工作:

我有点疑惑。后者如何工作,但numpy在提供简单列表时无法解决问题?

推荐的方法是什么?创建该中间体array可能不会对性能产生很大的影响,但这不是次优的吗?

我也很惊讶那些不起作用:

我是结构化数组的新手,我不记得numpy对输入类型有那么挑剔。一定有什么我错过了。

0 投票
2 回答
563 浏览

python - 将数据列添加到只有一行的 numpy rec 数组

我需要将一列数据添加到 numpy rec 数组中。我在这里看到了很多答案,但它们似乎不适用于只包含一行的 rec 数组......

假设我有一个 rec 数组x

我想将该值附加4到具有自己的字段名称和数据类型的新列中,例如

如果我尝试使用正常append_fields方法添加一列;

然后我最终得到

事实证明,对于只有一行的 rec 数组,len(x)不起作用,而x.size确实起作用。如果我改为使用np.hstack(),我会得到TypeError: invalid type promotion,如果我尝试np.c_,我会得到不想要的结果

0 投票
1 回答
21705 浏览

python - 结构化 2D Numpy 数组:设置列名和行名

我正在尝试找到一种采用 2d numpy 数组并将列名和行名作为结构化数组附加的好方法。例如:

我已经能够使用这样设置列:

这让我可以做,matrix[2]['a']但现在我想重命名行,这样我就可以做matrix['3']['a']

0 投票
1 回答
482 浏览

python - NumPy recfunctions join_by TypeError

当我尝试将“uint16”字段加入 NumPy 1.11 或 1.12(Python 3.5)中的结构化数组时遇到 TypeError。

这是错误:

如果我使用“float16”,则不会出现同样的问题。

这只是一个错误吗?或者有什么方法可以防止这个问题?

0 投票
1 回答
112 浏览

python - 如何写入结构化数组中的单个字段而不会收到警告

如果字段包含floats. 但是,即使我一个接一个地遍历每个字段,我也会收到警告。

执行最后一行后会弹出:

FutureWarning:Numpy 检测到您(可能正在)写入由 numpy.diagonal 返回的数组或通过选择结构化数组中的多个字段。此代码可能会在未来的 numpy 版本中中断 - 有关详细信息,请参阅 numpy.diagonal 或 arrays.indexing 参考文档。快速解决方法是进行显式复制(例如,执行 arr.diagonal().copy() 或 arr[['f0','f1']].copy())。data[dt] = (data[dt] - 表示) / stds

我可以在调试器中逐行运行它,以确保一切都符合预期,例如:

按照警告消息中的建议,复制数组有效:

摆脱警告的更优雅的方法是什么?在这种情况下,副本发生了什么变化?

0 投票
2 回答
947 浏览

arrays - 在 python 中,有没有更好的方法将字段添加到结构化的 numpy 数组中

我使用的代码虽然有效,但会发出警告信息。下面给出...

FutureWarning:具有不同字段名称的结构化数组之间的分配将在 numpy 1.14 中更改。

以前 dst 中的字段将设置为 src 中同名字段的值。在 numpy 1.14 中,字段将改为“按位置”分配:dst 的第 N 个字段将设置为 src 数组的第 N 个字段。

有关详细信息,请参阅发行说明

我该怎么做才能注意警告消息。不让它沉默。

0 投票
1 回答
1954 浏览

python - 在 NumPy 1.14 中将结构化数组的切片转换为常规 NumPy 数组

注1:在我的情况下,这个问题的答案都不起作用。

注意 2:该解决方案必须在 NumPy 1.14 中工作。

假设我有以下结构化数组:

arr = np.array([(105.0, 34.0, 145.0, 217.0)], dtype=[('a', 'f4'), ('b', 'f4'), ('c', 'f4'), ('d', 'f4')]).

现在我正在像这样切片结构化数据类型:

arr2 = arr[['a', 'b']]

现在我正在尝试将该切片转换为常规数组:

out = arr2[0].view((np.float32, 2))

这导致

ValueError: Changing the dtype of a 0d array is only supported if the itemsize is unchanged

我想得到的只是一个像这样的常规数组:

[105.0, 34.0]

请注意,此示例已简化,以使其最小化。在我的真实用例中,我显然不是在处理包含一个元素的数组。

我知道这个解决方案有效:

out = np.asarray(list(arr2[0]))

但我认为必须有一个更有效的解决方案,而不是将已经在 NumPy 数组中的数据复制到列表中,然后再复制回数组中。我认为有一种方法可以留在 NumPy 中,并且可能根本不复制任何数据,我只是不知道如何。

0 投票
3 回答
207 浏览

python - 完全嵌套 NumPy 结构化标量

在 NumPy 文档和其他 StackOverflow 问题中,提到了嵌套的 NumPy 结构化标量。在我所看到的任何地方,他们似乎都将嵌套结构化标量描述为包含另一个标量(显然)的标量,但内部标量始终是另一个 dtype。我想做的是能够拥有一个 NumPy dtype,它具有作为它的字段之一,它是自己的 dtype。

一个简单的例子是表示树节点的 dtype,它将存储一些值(如整数)和另一个表示它的父节点的树节点。

似乎这应该使用 numpy.void 来完成,但我无法使用如下的 dtype 来完成:

0 投票
0 回答
113 浏览

numpy - 如何在 python 多进程之间共享 numpy 结构化数组?

我有一个numpy 结构化数组,其 dtype 具有不同数据类型的多个字段。我想在我的python multiprocesses中更新这个结构化的 numpy 数组。我想我会使用Pool。我可以用什么方式来共享这个 numpy 结构化数组?
我已经阅读了一些关于在Ctype Array中包装 numpy 数组的页面,但我认为没有合适的 ctype 。
我可以将此数组作为指针传递吗?我还想在cython中将该函数编写为工作进程。

代码示例如下: