2024-09-25 00:27:25 发布
网友
所以我有两个数组,它们有相同的维数但长度不同。
Arr1=np.数组([[Ind1],[Ind2],[Ind3]])
Arr2=np.数组([[Ind7],[Ind3],[Ind3],[Ind4]])
我需要得到在两个数组中具有相同位置且相等的元素的位置和值。
在本例中,预期的答案是:
位置=2
值=Ind3
我将python与numpy模块一起使用。
也可以使用intersect1d获取相同的值:
np.intersect1d(a,b)
对于NumPy数组,您可能希望以矢量化的方式工作以提高性能,并使用数组切片。有鉴于此,这里有一种输入数组的方法a和b-
a
b
n = min(len(a), len(b)) out_idx = np.flatnonzero(a[:n] == b[:n]) out_val = a[out_idx] # or b[out_idx] both work
这会处理多个匹配项。
样本运行-
In [224]: a = np.array([3, 8, 9, 2, 1, 7]) In [225]: b = np.array([1, 2, 9, 7, 5, 7, 0, 4]) In [226]: n = min(len(a), len(b)) ...: out_idx = np.flatnonzero(a[:n] == b[:n]) ...: out_val = a[out_idx] ...: In [227]: out_idx Out[227]: array([2, 5]) In [228]: out_val Out[228]: array([9, 7])
对于作为索引输出的元组列表及其值-
In [229]: zip(out_idx, out_val) Out[229]: [(2, 9), (5, 7)]
对于索引和相应值的漂亮字典输出-
In [230]: {i:j for i,j in zip(out_idx, out_val)} Out[230]: {2: 9, 5: 7}
假设这些列表被称为lst_1和lst_2,您可以执行如下操作
lst_1
lst_2
for i in range(min(len(lst_1), len(lst_2)): if lst_1[i] == lst_2[i]: return lst_1[i], i
这将返回一个包含公共元素及其索引的元组。注意,如果有多个匹配项,则返回第一个匹配项;如果不存在匹配项,则返回None。
None
也可以使用intersect1d获取相同的值:
对于NumPy数组,您可能希望以矢量化的方式工作以提高性能,并使用数组切片。有鉴于此,这里有一种输入数组的方法
a
和b
-这会处理多个匹配项。
样本运行-
对于作为索引输出的元组列表及其值-
对于索引和相应值的漂亮字典输出-
假设这些列表被称为
lst_1
和lst_2
,您可以执行如下操作这将返回一个包含公共元素及其索引的元组。注意,如果有多个匹配项,则返回第一个匹配项;如果不存在匹配项,则返回
None
。相关问题 更多 >
编程相关推荐