Python :两个相同大小的有序 numpy 数组的向量化比较
Python : Vectorized comparison of two ordered numpy arrays of int of the same size
我想比较 Python 中两个大小相同的有序 numpy int 数组,并在相同位置输出相同值的公共元素:
import numpy as np
a = np.asarray([20, 35, 226, 62, 129, 108, 156, 225, 115, 35, 162, 43, 9, 120, 181, 220])
b = np.asarray([1, 35, 69, 103, 137, 171, 205, 239, 18, 52, 86, 120, 154, 188, 222, 240])
逐元素比较会给出:[35]
你能帮帮我吗?
像这样的东西可以工作:
l = []
for x,y in zip(a,b):
if x == y:
l.append(x)
在列表理解方面可以这样写:
l = [x for x,y in zip(a,b) if x == y]
说明
zip(a,b)
将生成以下内容:
>>> zip(a,b)
[(20, 1), (35, 35), (226, 69), (62, 103), (129, 137), (108, 171), (156, 205), (225, 239), (115, 18), (35, 52), (162, 86), (43, 120), (9, 154), (120, 188), (181, 222), (220, 240)]
>>>
然后,您遍历 zip(a,b)
结果的每个元素 (x,y) 并比较 x 和 y 。
可重现的例子:
>>> a = [20, 35, 226, 62, 129, 108, 156, 225, 115, 35, 162, 43, 9, 120, 181, 220
>>> b = [1, 35, 69, 103, 137, 171, 205, 239, 18, 52, 86, 120, 154, 188, 222, 240
>>> zip(a,b)
[(20, 1), (35, 35), (226, 69), (62, 103), (129, 137), (108, 171), (156, 205), (2
>>> [x for x,y in zip(a,b) if x == y ]
[35]
>>>
您显然不需要固定交集。 Zip 列出并比较同一索引处的项目:
>>> [x for x, y in zip(a, b) if x==y]
[35]
如果您使用的是 NumPy,则可以使用布尔掩码:
import numpy as np
a = np.asarray([20, 35, 226, 62, 129, 108, 156, 225, 115, 35, 162, 43, 9, 120, 181, 220])
b = np.asarray([1, 35, 69, 103, 137, 171, 205, 239, 18, 52, 86, 120, 154, 188, 222, 240])
c = a[a == b]
print(c) # [35]
虽然使用 zip 更符合 pythonic,但类似的东西就可以完成工作...
for index, value in enumerate(a):
if value == b[index]:
c.append(value)
我想比较 Python 中两个大小相同的有序 numpy int 数组,并在相同位置输出相同值的公共元素:
import numpy as np
a = np.asarray([20, 35, 226, 62, 129, 108, 156, 225, 115, 35, 162, 43, 9, 120, 181, 220])
b = np.asarray([1, 35, 69, 103, 137, 171, 205, 239, 18, 52, 86, 120, 154, 188, 222, 240])
逐元素比较会给出:[35]
你能帮帮我吗?
像这样的东西可以工作:
l = []
for x,y in zip(a,b):
if x == y:
l.append(x)
在列表理解方面可以这样写:
l = [x for x,y in zip(a,b) if x == y]
说明
zip(a,b)
将生成以下内容:
>>> zip(a,b)
[(20, 1), (35, 35), (226, 69), (62, 103), (129, 137), (108, 171), (156, 205), (225, 239), (115, 18), (35, 52), (162, 86), (43, 120), (9, 154), (120, 188), (181, 222), (220, 240)]
>>>
然后,您遍历 zip(a,b)
结果的每个元素 (x,y) 并比较 x 和 y 。
可重现的例子:
>>> a = [20, 35, 226, 62, 129, 108, 156, 225, 115, 35, 162, 43, 9, 120, 181, 220
>>> b = [1, 35, 69, 103, 137, 171, 205, 239, 18, 52, 86, 120, 154, 188, 222, 240
>>> zip(a,b)
[(20, 1), (35, 35), (226, 69), (62, 103), (129, 137), (108, 171), (156, 205), (2
>>> [x for x,y in zip(a,b) if x == y ]
[35]
>>>
您显然不需要固定交集。 Zip 列出并比较同一索引处的项目:
>>> [x for x, y in zip(a, b) if x==y]
[35]
如果您使用的是 NumPy,则可以使用布尔掩码:
import numpy as np
a = np.asarray([20, 35, 226, 62, 129, 108, 156, 225, 115, 35, 162, 43, 9, 120, 181, 220])
b = np.asarray([1, 35, 69, 103, 137, 171, 205, 239, 18, 52, 86, 120, 154, 188, 222, 240])
c = a[a == b]
print(c) # [35]
虽然使用 zip 更符合 pythonic,但类似的东西就可以完成工作...
for index, value in enumerate(a):
if value == b[index]:
c.append(value)