阅读此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'
答案 0 :(得分:1)
由于您要比较浮点值,因此最好使用numpy.allclose()
,从而将值保存在numpy
数组中:
return np.allclose(np.array(old_centroids), np.array(centroids))
(请注意,我将1D数组的列表转换为2D数组;从技术上讲,如果您愿意,可以对allclose()
和old_centroids
中的每对元素分别应用centroids
。)
修改(根据评论):如果old_centroids
和centroids
可能有不同的形状,请在allclose()
之前检查:
old = np.array(old_centroids)
new = np.array(centroids)
return old.shape == new.shape and np.allclose(old, new)