阅读此Converting NumPy array into Python List structure?之后,我有:

import numpy as np
print np.array(centroids).tolist()
print "here\n"
print old_centroids

print type(np.array(centroids).tolist())
print type(old_centroids)


这使:

[[-0.30485176069166947, -0.2874083792427779, 0.0677763505876472], ...,[0.09384637511656496, -0.015282322735474268, -0.05854574606104108]]
here
[array([-0.30485176, -0.28740838,  0.06777635]), ..., array([-0.03415291, -0.10915068,  0.07733185]), array([ 0.09384638, -0.01528232, -0.05854575])]
<type 'list'>
<type 'list'>


但是,当我在做:

return old_centroids == np.array(centroids).tolist()


我收到此错误:

return old_centroids == np.array(centroids).tolist()
ValueError: The truth value of an array with more than one element is ambiguous.


如何解决这个问题?

centroids的类型是<type 'numpy.ndarray'>,它们的计算方式如下:

from sklearn import decomposition
centroids = pca.transform(mean_centroids)




请注意,没有PCA,我只会这样做:

return old_centroids == centroids




EDIT_0:

Check if two unordered lists are equal建议set(),因此我做了:

return set(old_centroids) == set(np.array(centroids).tolist()) # or set(centroids)


并得到:

TypeError: unhashable type: 'list'

最佳答案

由于要比较浮点值,因此最好使用numpy.allclose(),因此,将值保留为numpy数组形式:

return np.allclose(np.array(old_centroids), np.array(centroids))


(请注意,我已将一维数组的列表转换为二维数组;从技术上讲,如果需要,您可以对allclose()old_centroids中的每对元素分别应用centroids。)

编辑(基于注释):如果old_centroidscentroids的形状可能不同,请在allclose()之前进行检查:

old = np.array(old_centroids)
new = np.array(centroids)
return old.shape == new.shape and np.allclose(old, new)

关于python - 检查列表是否相等,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35236825/

10-12 20:47