【发布时间】:2012-01-23 16:31:39
【问题描述】:
我有 3 个具有以下结构的 numpy 重新数组。 第一列是某个位置(整数),第二列是分数(浮点数)。
输入:
a = [[1, 5.41],
[2, 5.42],
[3, 12.32],
dtype=[('position', '<i4'), ('score', '<f4')])
]
b = [[3, 8.41],
[6, 7.42],
[4, 6.32],
dtype=[('position', '<i4'), ('score', '<f4')])
]
c = [[3, 7.41],
[7, 6.42],
[1, 5.32],
dtype=[('position', '<i4'), ('score', '<f4')])
]
所有 3 个数组都包含相同数量的元素。
我正在寻找一种基于位置列将这三个二维数组组合成一个数组的有效方法。
上述示例的输出数组应如下所示:
输出:
output = [[3, 12.32, 8.41, 7.41],
dtype=[('position', '<i4'), ('score1', '<f4'),('score2', '<f4'),('score3', '<f4')])]
只有位置为 3 的行在输出数组中,因为该位置出现在所有 3 个输入数组中。
更新:我的幼稚方法是以下步骤:
- 为我的 3 个输入数组的第一列创建向量。
- 使用 intersect1D 得到这 3 个向量的交集。
- 以某种方式检索所有 3 个输入数组的向量的索引。
- 使用 3 个输入数组中的过滤行创建新数组。
更新2: 每个位置值可以在一个、两个或所有三个输入数组中。在我的输出数组中,我只想包含所有 3 个输入数组中出现的位置值的行。
【问题讨论】:
-
如果它导致位置具有不同数量的值,所以数组会变形?
-
我不确定我是否理解。我可以保证 3 个输入数组始终具有相同的形状/结构 (N,1),在我的情况下,我始终有 3 个输入数组。输出数组的形状应为 (X,4)
-
那么数组要么全部包含一个值,要么没有包含一个值?即你不会得到 2/3 包含一个值?另外,您能否编辑问题以创建数组,而不是显示 repr?
-
不,可能只有一两个包含位置值。但是,在输出数组中,我只想包含在所有 3 个输入数组中都有位置值的行。我更新了问题以使其更清晰
标签: python arrays numpy set intersection