如何使用掩码将元素和索引放入原始数组
How to get elements and indices into original array with mask
我正在尝试从元素匹配的两个数组中获取元素和索引。我想我想多了,但我已经尝试了 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
。
np.where
将 arr1 >= 0.01
之类的布尔掩码转换为索引。可以直接用面具select,但不能反转。您需要反转索引,因为您想要与原始数组相交,而不是 selection。确保设置 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
时,索引 ind1
和 ind2
引用掩蔽的 select 离子。由于 index1
是 selection1
中每个元素的原始索引,index1[ind1]
将 ind1
转换回 arr1
参考系。
你原来的表达其实毫无意义。您正在与满足您条件的每个数组中的索引相交。这与这些索引的值无关(根本不必匹配)。看似正确的结果纯属巧合,基于偶然的数组构造。
我正在尝试从元素匹配的两个数组中获取元素和索引。我想我想多了,但我已经尝试了 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
。
np.where
将 arr1 >= 0.01
之类的布尔掩码转换为索引。可以直接用面具select,但不能反转。您需要反转索引,因为您想要与原始数组相交,而不是 selection。确保设置 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
时,索引 ind1
和 ind2
引用掩蔽的 select 离子。由于 index1
是 selection1
中每个元素的原始索引,index1[ind1]
将 ind1
转换回 arr1
参考系。
你原来的表达其实毫无意义。您正在与满足您条件的每个数组中的索引相交。这与这些索引的值无关(根本不必匹配)。看似正确的结果纯属巧合,基于偶然的数组构造。