将两个NumPy数组合并为一个结构化数组以附加到PyTables表中

问题描述 投票:0回答:3

我有两个非结构化的NumPy数组ab,分别具有形状(N,)(N, 256, 2)和dtype np.float。我希望将它们组合成具有形状的单个结构化数组(N,)和dtype [('field1', np.float), ('field2', np.float, (256, 2))]

令人惊讶的是,缺少有关此方面的文档。我找到了np.lib.recfunctions.merge_arrays之类的方法,但无法找到执行此操作所需的功能的精确组合。


为了避免the XY problem,我会陈述更广泛的目标。

我有一个布局为{"field1": tables.FloatCol(), "field2": tables.FloatCol(shape = (256, 2))}的PyTables表。这两个NumPy数组表示要添加到这些字段中的每个字段的N个新行。 N很大,所以我希望通过一个有效的table.append(rows)调用来完成此操作,而不是通过table.row['field'] = ...循环的缓慢过程。]

The table.append documentation

rows参数可以是任何可以转换为与表结构兼容的结构化数组的对象(否则,将引发ValueError)。这包括NumPy结构化的数组,元组或数组记录的列表以及字符串或Python缓冲区。

将数组转换为适当的结构化数组似乎是我在这里应该做的。我正在寻找速度,并且我预计其他选择会更慢。

我有两个非结构化的NumPy数组a和b,分别具有形状(N,)和(N,256,2)以及dtype np.float。我希望将它们组合成形状(N,)和dtype [('...

python numpy numpy-ndarray pytables
3个回答
1
投票

定义dtype,并创建一个空/零数组:


0
投票

为了获得合适尺寸的测试打印输出,我的解决方案假设:


0
投票
行参数可以是任何可以转换为与表结构兼容的结构化数组。...包括NumPy结构化数组,

元组列表或数组记录...

换句话说,您可以追加引用数组的列表,只要它们与示例中使用table.append()创建的表结构匹配即可。 (我认为您在创建时仅限于结构化数组。)这可能会简化您的代码。

我写了一个基于@hpaulj代码的示例。它使用不同的方法创建2个相同的HDF5文件。

对于第一个文件(description=dt),我使用结构化数组方法创建表。然后,我使用_1.h5将3行数据添加到表中

对于第二个文件(table.append([list of arrays])),我创建了引用使用_2.h5的结构化数组dtype,但不要使用description=dt添加数据。然后,我使用obj=arr将数据的前3行添加到表中,然后重复添加另外3行。

以下示例:

    table.append([list of arrays])
© www.soinside.com 2019 - 2024. All rights reserved.