python – 根据一列中的公共值创建两个或多个2d numpy数组的交集
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 根据一列中的公共值创建两个或多个2d numpy数组的交集,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2086字,纯文字阅读大概需要3分钟。
内容图文
![python – 根据一列中的公共值创建两个或多个2d numpy数组的交集](/upload/InfoBanner/zyjiaocheng/784/ed9abb6319f54821bc6c9c38a21768f0.jpg)
我有3个numpy recarray具有以下结构.
第一列是某个位置(整数),第二列是分数(Float).
输入:
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个数组都包含相同数量的元素.
我正在寻找一种基于位置列将这三个2d数组合成一个数组的有效方法.
上面示例的输出arary应如下所示:
输出:
output = [[3, 12.32, 8.41, 7.41],
dtype=[('position', '<i4'), ('score1', '<f4'),('score2', '<f4'),('score3', '<f4')])]
只有位置3的行在输出数组中,因为此位置出现在所有3个输入数组中.
更新:我的天真方法将遵循以下步骤:
>创建我的3个输入数组的第一列的向量.
>使用intersect1D获取这3个向量的交集.
>以某种方式检索所有3个输入数组的向量索引.
>使用3个输入数组中的过滤行创建新数组.
UPDATE2:
每个位置值可以在一个,两个或所有三个输入数组中.在我的输出数组中,我只想包含出现在所有3个输入数组中的位置值的行.
解决方法:
这是一种方法,我相信它应该相当快.我想你要做的第一件事是计算每个位置的出现次数.这个函数将处理:
def count_positions(positions):
positions = np.sort(positions)
diff = np.ones(len(positions), 'bool')
diff[:-1] = positions[1:] != positions[:-1]
count = diff.nonzero()[0]
count[1:] = count[1:] - count[:-1]
count[0] += 1
uniqPositions = positions[diff]
return uniqPositions, count
现在使用上面的函数形式,您只想获取3次出现的位置:
positions = np.concatenate((a['position'], b['position'], c['position']))
uinqPos, count = count_positions(positions)
uinqPos = uinqPos[count == 3]
我们将使用搜索排序,因此我们对b和c进行排序:
a.sort(order='position')
b.sort(order='position')
c.sort(order='position')
现在我们可以对用户搜索进行排序,以找到每个数组中的哪个位置来查找每个uniqPos:
new_array = np.empty((len(uinqPos), 4))
new_array[:, 0] = uinqPos
index = a['position'].searchsorted(uinqPos)
new_array[:, 1] = a['score'][index]
index = b['position'].searchsorted(uinqPos)
new_array[:, 2] = b['score'][index]
index = c['position'].searchsorted(uinqPos)
new_array[:, 3] = c['score'][index]
使用字典可能有一个更优雅的解决方案,但我先想到了这个,所以我会把它留给其他人.
内容总结
以上是互联网集市为您收集整理的python – 根据一列中的公共值创建两个或多个2d numpy数组的交集全部内容,希望文章能够帮你解决python – 根据一列中的公共值创建两个或多个2d numpy数组的交集所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。