繁体   English   中英

比较两个不同大小的数组 - python numpy

[英]Compare two arrays with different size - python numpy

所以我有两个数组,它们的维度相同但长度不同。

Arr1 = np.array([[Ind1],[Ind2],[Ind3]])

Arr2 = np.array([[Ind7],[Ind3],[Ind3],[Ind4]])

我需要获取两个数组中具有相同位置且相等的元素的位置和值。

在示例情况下,预期的答案将是:

位置 = 2

值 = Ind3

我正在将 python 与 numpy 模块一起使用。

使用 NumPy 数组,您可能希望以矢量化方式工作以提高性能并利用数组切片。 考虑到这一点,这是输入数组ab的一种方法 -

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_1lst_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

您还可以使用 intersect1d 来获得相同的值:

np.intersect1d(a,b)

当我尝试比较两个不同大小的数组时,我遇到了同样的问题。 我只是将它们转换为列表,现在它不会抛出任何警告/错误。

我用来将数组转换为列表的代码是 -

import numpy as np
np.array([[1,2,3],[4,5,6]]).tolist()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM