我有6个数组,比方说a,b,c1,d1,c2,d2
。
数组a and b
有一些共同的c1,c2
和d1,d2
对。我找到了这些常见的对,即。那些a and b
具有相同c1,d1
和c2,d2
的{{1}}:
data_zcosmo_lastz = a
data_zphot_lastz = b
halo_id_zcosmo = c1
halo_id_zphot = c2
idrep_zcosmo = d1
idrep_zphot = d2
file2freq1 = Counter(zip(c1,d1))
file2freq2 = Counter(zip(c2,d2))
set_a = set(file2freq1) & set(file2freq2) # common objects
上述代码使set_a
具有c1,d1
和c2,d2
的常用值。
但如何获取a and b
的{{1}}的值?
即。我希望set_a
的{{1}}和a
值。
示例
b
现在我想要set_a
这些具有这些对的值。即
a = [1,2,3,4,5]
b = [2,3,4,5,6]
c1 = [1,1,1,2,2]
d1 = [3,3,3,4,4]
c2 = [1,1,2,2,2]
d2 = [3,3,1,4,4]
so set_a = [(1,3),(1,3),(2,4),(2,4)]
答案 0 :(得分:1)
仍然不是100%你在问什么。根据我的理解,您希望a
和b
的元素位于c1
和d1
的元素与c2
的元素相同的位置分别和d2
。
在这种情况下,使用set
和Counter
将无济于事,因为这些将删除有关该位置的任何信息。相反,只需zip
所有这些列表......
for a_, b_, c1_, d1_, c2_, d2_ in zip(a,b,c1,d1,c2,d2):
if (c1_,d1_) == (c2_,d2_):
print(a_, b_)
...或仅zip
c1,d1,c2,d2
列表并使用enumerate
获取职位:
idx = [i for i, t in enumerate(zip(c1,d1,c2,d2)) if t[:2] == t[2:]]
print([(a[i], b[i]) for i in idx])
或者,在将数组转换为numpy
之后,您也可以使用numpy.arrays
。 A = np.array(a)
等等。
>>> match = np.logical_and(C1 == C2, D1 == D2)
>>> match
array([ True, True, False, True, True], dtype=bool)
>>> A[match]
array([1, 2, 4, 5])
>>> B[match]
array([2, 3, 5, 6])