我有两个二维numpy正方形数组A和B。B是从A中提取出来的数组,其中某些列和行(具有相同的索引)已被剥离。它们都是对称的。例如,A和B可能是:
尽管它仍未使用高级索引,并且仍然迭代可能很长的列表,但这个部分解决方案看起来更清晰,我暂时会坚持使用它。
A = np.array([[1,2,3,4,5],
[2,7,8,9,10],
[3,8,13,14,15],
[4,9,14,19,20],
[5,10,15,20,25]])
B = np.array([[1,3,5],
[3,13,15],
[5,15,25]])
使缺失的索引为[1,3],交叉的索引为[0,2,4]。
有没有一种“智能”方法来提取A中与B中存在的行/列相应的索引,涉及高级索引等?我能想到的是:
import numpy as np
index = np.array([],dtype=int)
n,m = len(A),len(B)
for j in range(n):
k = 0
while set(np.intersect1d(B[j],A[k])) != set(B[j]) and k<m:
k+=1
np.append(index,k)
我知道当处理大型数组时,这种方法速度较慢且资源消耗较大。
谢谢!
编辑: 我找到了一种更聪明的方法。我从两个数组中提取对角线,并使用简单的相等检查在其上执行上述循环:
index = []
a = np.diag(A)
b = np.diag(B)
for j in range(len(b)):
k = 0
while a[j+k] != b[j] and k<n:
k+=1
index.append(k+j)
尽管它仍未使用高级索引,并且仍然迭代可能很长的列表,但这个部分解决方案看起来更清晰,我暂时会坚持使用它。