我有这段代码:
import numpy as np
a=np.array([5,6,7,8,9])
b=np.array([5,6,7,8,9])
scoreA = np.array([float(1) / (i + 1) for i in range(len(a))])
scoreB = np.array([0 for i in range(len(b))])
for eleA in a:
if eleA in b:
i, = np.where(b == eleA)
i = i[0]
j, = np.where(a == eleA)
j = j[0]
scoreB[i] = scoreA[j]
print "B is: %f" % scoreB[i]
print "A is: %f" % scoreA[j]
所以基本思路是:对于数组a和b,如果在两个数组中找到一个元素,那么我将把scoreA中该元素的分数分配给scoreB。但结果是这样的:
B is: 1.000000
A is: 1.000000
B is: 0.000000
A is: 0.500000
B is: 0.000000
A is: 0.333333
B is: 0.000000
A is: 0.250000
B is: 0.000000
A is: 0.200000
表示行:
scoreB[i] = scoreA[j]
工作不正常?我该如何解决这个问题?
答案 0 :(得分:2)
你的解决方案很奇怪,最好像@Divakar提到的那样。
但无论如何,问题在于scoreA
和scoreB
有不同的类型:float64
和int64
。
请
scoreA = np.array([float(1) / (i + 1) for i in range(len(a))],dtype=float)
scoreB = np.array([0 for i in range(len(b))],dtype=float)
或其他一些dtype,以确保您的所有分数都具有相同的类型。