【发布时间】:2017-12-29 20:27:40
【问题描述】:
我有以下 4 个数组,我想获取数组 A 和 X 中相等的值的索引,对应于 B 和 Y 中相同位置的值。因此对于以下示例,
import numpy as np
A = np.asarray([400.5, 100, 700, 200, 15, 900])
B = np.asarray([500.5, 200, 500, 600.5, 8, 999])
X = np.asarray([400.5, 700, 100, 300, 15, 555, 900])
Y = np.asarray([500.5, 500,600.5, 100, 8, 555, 999])
我想得到两个带有索引的数组:
indAB = [0 2 4 5]
- 0 因为 A&B 中的 400.5 和 500.5 也在 X&Y 的位置 0
- 2 因为 A&B 中的 700 和 500 也在位置 2 的 X&Y 中
- 4 因为 A&B 中的 15 和 8 也在 X&Y 中的位置 4
- 5 因为 A&B 中的 900 和 999 也在 X&Y 中的位置 5
indXY = [0 1 4 6]
- 0、1、4 和 6 与 indAB 类似,但与 X&Y 相关。
其中 indAB 是 A 和 B 中的值的索引,它们等于 X 和 Y 中的值,indXY 是 X 和 Y 中的值的索引,它们等于 A 和 B 中的值。
这是我目前的尝试:
def indices(a,b):
setb = set(b)
ind = [i for i, x in enumerate(a) if x in setb]
return ind
iA = np.asarray(indices(A,X))
iB = np.asarray(indices(X,A))
iX = np.asarray(indices(B,Y))
iY = np.asarray(indices(Y,B))
def CommonIndices(a,b):
return np.asarray(list(set(a) & set(b)))
indAB = CommonIndices(iA,iX)
indXY = CommonIndices(iB,iY)
print(indAB) # returns = [0 2 4 5]
print(indXY) # returns = [0 1 2 4 6]
我不断得到 [0 1 2 4 6] 的 indXY 不正确。 2 不应该包括在内,因为即使 600.5 在 Y 和 B 中,200 和 100 在 A 和 B 中(分别)也不相等。
如果有人能提供解决方案,我将不胜感激。非常感谢!
【问题讨论】:
标签: python arrays numpy equals indices