问题标签 [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 回答
240 浏览

python - 将字段添加到结构化 ndarray 的内存友好方式——无需复制数据?

要将字段添加到结构化 numpy 数组中,只需创建一个具有新 dtype 的新数组,复制旧字段并添加新字段即可。但是,我需要对占用大量内存的数组执行此操作,并且我宁愿不复制所有内容。我自己的实现和(慢)实现numpy.lib.recfunctions.append_fields重复内存中的(慢)实现。

ndarray有没有办法在不复制内存的情况下将字段添加到结构化?这意味着,要么是一种避免创建 new 的方式,要么是一种创建ndarray方式ndarray指向与旧数据相同的新数据的方式?

复制 RAM 的解决方案:

有一个类似的问题,挑战是删除而不是添加字段。该解决方案使用一个视图,它应该适用于原始数据的一个子集,但我不确定当我想添加字段时是否可以修改它。

0 投票
1 回答
40 浏览

python - 在结构化数组中查找标头名称的一部分的标头索引

在我的列表中有字符串,例如

A_list= ['mass_32_', 'mass_40_', 'mass_28_']

我想从只有数字的数组中找到元素的索引。

例如

masses=[32,28]

我想找到与 A_list 中的索引相对应的整数的索引。

对 for/while 循环有什么建议吗?

0 投票
2 回答
502 浏览

python - 带有偏移量的 numpy 结构化数组的视图

我有以下 numpy 结构化数组:

下面的数组是上面数组的一个子集(也是一个视图):

我正在尝试将 y 转换为常规的 numpy 数组。我希望数组是一个视图。问题是以下给了我一个错误:

但是,如果我选择连续的字段,它会起作用:

当字段不连续时,视图转换似乎不起作用,是否有替代方法?

0 投票
1 回答
720 浏览

python-3.x - 填充结构化数组会引发“ndarray 不是 C 连续”错误

我正在使用以这种方式定义的结构化数组:

然后在 for 循环中填充它:

其中列表中的所有变量都是形状为 (1,) 的 numpy 数组。但是,这行代码会引发上述错误。为什么?

0 投票
1 回答
123 浏览

python - 使用 NumPy 结构化数组

我正在使用具有以下结构的 NumPy 结构化数组:

为“bar”的特定值提取“foo”字段的有效方法是什么?例如,我想将所有 'bar' 为 0 的 'foo' 值存储在一个数组中:

以上不起作用。

0 投票
2 回答
600 浏览

python - 将numpy结构化数组子集转换为numpy数组而不复制

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

我正在尝试将上述数组的子集修改为常规的 numpy 数组。对于我的应用程序来说,不创建任何副本(仅视图)是必不可少的。

使用以下函数从上述结构化数组中检索字段:

如果我对“f2”和“f3”字段感兴趣,我会执行以下操作:

有一种方法可以直接从原始结构化数组的“f2”和“f3”字段中获取 ndarray。但是,对于我的应用程序,有必要构建这个中间结构化数组,因为这个数据子集是一个类的属性。

如果不进行复制,我无法将中间结构化数组转换为常规的 numpy 数组。

此函数还可用于将记录数组转换为 ndarray:

但是,我收到以下错误:

如果我创建一个副本,该功能可以正常工作:

两个数组之间似乎没有区别:

0 投票
1 回答
122 浏览

python - Python结构化数组不起作用

我正在153,673*25通过 Anaconda 的 Spyder(Python 2)中的 IPython 控制台使用 pandas 导入一个包含整数、浮点数和字符串的 csv 数据矩阵。然后,我想通过手动指定 pandaframe 列名和类型来将这些数据转换为结构化数组。下面是代码 - 函数importing_data.run()attributes_names.run()分别导入 pandaframe 格式的 csv 数据,并将 pandaframe 的列名提取为列表:

然而,最后的循环似乎失败了:它有时会推动内核重新启动,而当它没有重新启动时,data_sample数组有一个意想不到的结构;我不能准确地描述它,因为最近我只重启了内核,但我相信它是一个由维度列表153,673*25组成的153,673维度数组。

我在这里做错了什么?


编辑

我犯的第一个错误如下:而不是

我必须说:

我重新定义了循环如下:

但现在我收到以下错误消息:TypeError: expected a single-segment buffer object

0 投票
3 回答
264 浏览

python - PYTHON/NUMPY:与常见的 numpy-arrays Python2.7 相比处理结构化数组

我问这个问题的主要原因是因为我不完全知道结构化数组与普通数组相比是如何工作的,并且因为我无法在网上找到适合我的案例的示例。此外,我可能首先错误地填充了我的结构化数组。

所以,在这里我想介绍“正常”的 numpy-array 版本(以及我需要用它做什么)和新的“结构化”数组版本。我的(最大的)数据集包含大约 200e6 个对象/行,最多 40-50 个属性/列。除了一些特殊的列之外,它们都具有相同的数据类型:'haloid'、'hostid'、'type'。它们是 ID 号或标志,我必须将它们与其余数据一起保存,因为我必须用它们来识别我的对象。

数据集名称:

数据类型:

从 .hdf5 文件格式读取数据到数组

大多数数据存储在 hdf5 文件中(其中 2000 个对应于我必须一次处理的一个快照),应该将其读入单个数组

编辑:我编辑上面的代码是因为hpaulj幸运地评论了以下内容:

第一点混乱。您显示一个名称为的 dt 定义,dt = [('haloid', '<u8'), ('hostid', '<u8'), ('type', 'i1'),....但 h5 负载是 data_array['name'+str(a)][size_before:new_size] = f['name'+str(a)] 换句话说,该文件具有数据集像 name0、name1 这样的名称,并且您正在将它们下载到具有相同名称的字段的数组中。

这是一个“I-simplify-code”复制/粘贴错误,我更正了

问题 1:这是填充结构化数组的正确方法吗?

问题 2:如何寻址结构化数组中的列?

问题 3:如何寻址结构化数组中的整行?

问题 4:如何处理 3 行和所有列?

问题 5:为什么data_array[0:3]不只返回 10 列的前 3 行?

问题6:如何处理第一列的前两个元素?

好的!收到!

问题 7:如何按名称寻址三个特定列,它们在该列中的前 3 行?

好的,最后一个例子似乎有效!!!

问题8:有什么区别:

(a)data_array['haloid'][0][0:3]和 (b)data_array['haloid'][0:3]

其中(a)实际上返回前三个卤素,(b)返回很多卤素(10x3)。

问题 9:data_array['haloid'][0:3]实际返回的是什么?

问题 10:如何使用np.where()

这似乎有效,但我不确定!

问题 11:我还可以使用np.resize()like:data_array = np.resize(data_array,(new_size, nr_entries))调整/重塑我的数组吗?

问题12:如何对结构化数组进行排序?

谢谢,我感谢任何帮助或建议!

0 投票
1 回答
98 浏览

python - 关于 Numpy 的结构化数组

要定义结构化数组,我们可以使用元组参数。例如:

我不明白,为什么是 x array([0,0,0])?为什么 x['r'] 也是array([0,0,0])

0 投票
1 回答
804 浏览

python - Extract python 'native' values from numpy structured array

I have a structured numpy array.

The numpy structure matches the type google.protobuf.Timestamp.

I need to extract the seconds int64 and the nanos int32 from each element of said structure and assign it to the real Timestamp structure.

Below I list a script that does just that in a convenient way for anyone to test (numpy and protobuf Python modules need to be installed).

How do I get rid/circumvent the TypeError listed at the end and have the values out of the numpy structure in the Timestamp variable?

Disclaimer: hardcore newbie when it comes to python and numpy arrays.