Python Numpy数组:赋值失败
我有以下代码片段:Python Numpy数组:赋值失败,python,arrays,numpy,Python,Arrays,Numpy,我有以下代码片段: 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 == e
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]
工作不正常吗?我如何解决这个问题?您的解决方案很奇怪,最好按照@Divakar所说的那样解决。 但无论如何,《代码>分数A》和《代码>分数B》有不同的类型:
float64
和int64
制造
或其他一些数据类型,以确保您的所有分数具有相同的类型。IIUC,只需执行:
mask=a==b
<代码>scoreB[mask]=scoreA[mask]。
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)