如何使用掩码将元素和索引放入原始数组

2024-05-19 15:39:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图从元素匹配的两个数组中获取元素和索引。我认为我想得太多了,但我已经尝试了where函数和交集,但无法让它工作。我的实际阵列要长得多,但这里有两个简单的阵列来演示我想要的:

import numpy as np

arr1 = np.array([0.00, 0.016, 0.033, 0.050, 0.067])
arr2 = np.array([0.016, 0.033, 0.050, 0.067, 0.083])

ind = np.intersect1d(np.where(arr1 >= 0.01), np.where(arr2 >= 0.01))

打印ind显示array([1, 2, 3, 4])。从技术上讲,我需要来自arr1的元素1, 2, 3, 4和来自arr2的元素0, 1, 2, 3,这将给出两个数组中匹配的元素0.016, 0.033, 0.050, 0.067


Tags: 函数importnumpy元素asnp数组where
1条回答
网友
1楼 · 发布于 2024-05-19 15:39:08

np.where将类似arr1 >= 0.01的布尔掩码转换为索引。您可以直接使用遮罩进行选择,但它不是可逆的。您需要反转索引,因为您希望与原始阵列相交,而不是与选择相交。确保设置return_indices=True以从intersect1d获取索引:

index1 = np.nonzero(arr1 >= 0.01)
index2 = np.nonzero(arr2 >= 0.01)
selection1 = arr1[index1]
selection2 = arr2[index1]

elements, ind1, ind2 = np.intersect1d(selection1, selection2, return_indices=True)

index1 = index1[ind1]
index2 = index2[ind2]

当您直接从交叉点获取elements时,索引ind1ind2正在引用屏蔽的选择。因为index1selection1中每个元素的原始索引,所以index1[ind1]ind1转换回arr1参考帧

你原来的表情其实毫无意义。您正在与满足条件的每个数组中的索引相交。这与这些索引的值无关(根本不需要匹配)。看似正确的结果纯粹是基于偶然阵列构造的巧合

相关问题 更多 >