这不是一个重复的问题,因为我想知道我的代码有什么问题,而不是找到替代解决方案。
下面的代码出了什么问题?
结果只包含51个,但它还应该包含列表'data_B'中的其他元素30,11,29。
import numpy as np
names_A = ['David', 'Mark', 'Brian', 'Michael']
data_A = [4,3,1,2]
names_B = ['Mark', 'David', 'Michael', 'Brian']
data_B = [51,30,11,29]
data = np.array([[4,4,3,3,2,2,1,1,3,3],
[4,3,3,3,2,2,3,1,3,1],
[4,2,3,3,2,2,4,1,4,3]])
dats = data.ravel()
results = []
for d in dats:
nam_A = names_A[data_A == int(d)]
##HERE IS THE POTENTIAL ERROR!!!
dat_B = data_B[names_B == nam_A]
results.append(dat_B)
print np.array(results).reshape(data.shape)
[[51 51 51 51 51 51 51 51 51 51]
[51 51 51 51 51 51 51 51 51 51]
[51 51 51 51 51 51 51 51 51 51]]
答案 0 :(得分:3)
下面我的代码出了什么问题?
data_A == int(d)
返回False/0
,因为列表永远不会等于整数,所以每次0
nam_A
的元素David
都会得到相同的内容。
然后您再次使用dat_B = data_B[names_B == nam_A]
又名['Mark', 'David', 'Michael', 'Brian'] == "David"
,因为列表不能等于字符串False/0
,因此您添加了0
的{{1}}元素} data_B
一次又一次......
我不知道代码的逻辑是什么,你创建一个数组,调用ravel并且不要将数组用于列表无法做的任何事情。