来自这个数组
s = np.array([[35788, 41715, ... 34964],
[5047, 23529, ... 5165],
[12104, 33899, ... 11914],
[3646, 21031, ... 3814],
[8704, 7906, ... 8705]])
我有一个这样的循环
end =[]
for i in range(len(s)):
for j in range(i, len(s)):
out = mahalanobis(s[i], s[j], invcov)
end.append(out)
print end
然后我获取输出:
[0.0, 12.99, 5.85, 10.22, 3.95, 0.0, 5.12, 3.45, 4.10, 0.0, 5.05, 8.10, 0.0, 15.45, 0.0]
但我想要这样的输出:
[[0.0, 12.99, 5.85, 10.22, 3.95],
[12.99, 0.0, 5.12, 3.45, 4.10],
[5.85, 5.12, 0.0, 5.05, 8.10],
[10.22, 3.45, 5.05, 0.0, 15.45],
[3.95, 4.10, 8.10, 15.45, 0.0]]
请您参考如下方法:
您至少需要以两种方式进行不同的循环:
end =[]
for s1 in s:
end.append([mahalanobis(s1, s2, invcov) for s2 in s])
最重要的是内层循环需要再次对整个s,否则你永远不会得到一个正方形而是1 + 2 + ... + len(s ) 项(在本例中为 15,因为 len(s) 为 5)。
接下来,内部循环必须包含在一个列表中,因为您需要一个列表的列表。
不太重要但很好:我已将内部循环更改为列表理解;并且我已经将两个循环都更改为直接在 s 上进行,因为确实没有理由遍历循环索引然后使用这些索引获取 s 项的间接方法关心。
所以我总共做了四项更改,但前两项是您真正需要的才能获得您想要的结果,另外两项只是很好的改进:-)。
