如何 combine/merge 具有两个键的两个结构化数组的值?
How to combine/merge the values of two structured arrays with two keys?
我有两个具有相同键和数据类型的结构化数组。
import numpy as np
# Define a dtype with x and y integers
arr1 = np.empty(6, dtype=[('x', int), ('y', int)])
arr2 = np.empty(8, dtype=[('x', int), ('y', int)])
# Add the data to the structured array
arr1['x'] = np.array([ 32, 32, 32, 32, 32, 39])
arr1['y'] = np.array([449, 451, 452, 453, 454, 463])
arr2['x'] = np.array([ 39, 34, 32, 32, 37, 32 ,23, 12])
arr2['y'] = np.array([463, 393, 453, 452, 261, 449, 1243, 263])
两个结构化数组可以有不同的长度,如图所示。这些值出现在 x 和 y 对中。
我想合并这两个结构化数组,这样
- 它们之间共享的值(相同的 x 和 y 值组合)不会重复并且只会出现一次
- 它们之间不共享的值(不同的 x 和 y 值组合)将包含在合并的结构数组中
- 附加值的方式不需要顺序或模式。只要结果包含两者之间存在的所有 x 和 y 对,并且是唯一的。
如果有一种有效的方法来组合两个以上的结构化数组,例如这些结构化数组中的 3 个或 4 个,那么我们将不胜感激。
在上面的例子中,我希望它合并如下,其中arr3
是合并的结果:
arr3['x'] = np.array([32,32,32,32,32,39,34,37,23,12])
arr3['y'] = np.array([449,451,452,453,454,463,393,261,1243,263])
两个结构化数组之间的所有唯一值对都在 arr3
。
我已经尝试创建一些代码,但我不确定从哪里开始。谢谢。
您可以简单地将值与 np.concatenate
连接起来,然后使用 np.unique
:
删除重复值
arr3 = np.unique(np.concatenate([arr1, arr2]))
我有两个具有相同键和数据类型的结构化数组。
import numpy as np
# Define a dtype with x and y integers
arr1 = np.empty(6, dtype=[('x', int), ('y', int)])
arr2 = np.empty(8, dtype=[('x', int), ('y', int)])
# Add the data to the structured array
arr1['x'] = np.array([ 32, 32, 32, 32, 32, 39])
arr1['y'] = np.array([449, 451, 452, 453, 454, 463])
arr2['x'] = np.array([ 39, 34, 32, 32, 37, 32 ,23, 12])
arr2['y'] = np.array([463, 393, 453, 452, 261, 449, 1243, 263])
两个结构化数组可以有不同的长度,如图所示。这些值出现在 x 和 y 对中。
我想合并这两个结构化数组,这样
- 它们之间共享的值(相同的 x 和 y 值组合)不会重复并且只会出现一次
- 它们之间不共享的值(不同的 x 和 y 值组合)将包含在合并的结构数组中
- 附加值的方式不需要顺序或模式。只要结果包含两者之间存在的所有 x 和 y 对,并且是唯一的。
如果有一种有效的方法来组合两个以上的结构化数组,例如这些结构化数组中的 3 个或 4 个,那么我们将不胜感激。
在上面的例子中,我希望它合并如下,其中arr3
是合并的结果:
arr3['x'] = np.array([32,32,32,32,32,39,34,37,23,12])
arr3['y'] = np.array([449,451,452,453,454,463,393,261,1243,263])
两个结构化数组之间的所有唯一值对都在 arr3
。
我已经尝试创建一些代码,但我不确定从哪里开始。谢谢。
您可以简单地将值与 np.concatenate
连接起来,然后使用 np.unique
:
arr3 = np.unique(np.concatenate([arr1, arr2]))