После прочтения этой 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'
'г = все (less_equal (абс (ху), Atol + RTOL * абс (у))) ValueError: операнды не могут передаваться вместе с формами (25,0) (25,3)' , Может быть, потому что в первый раз «old_centroids» - это всего лишь список из 25 пустых списков? – gsamaras
Ну, это наверняка не заполнено пустым списком в распечатке, который у вас есть в вашем вопросе. Добавьте пример исполняемого файла, если есть другие варианты содержимого «old_centroids». Если это единственный вариант, просто проверьте, чтобы размер массива был больше 0 перед сравнением. – fjarri
fjarri, он будет слишком длинным, и мой вопрос уже большой. 'old_centroids' состоит из 25 пустых списков на самой первой итерации ** только **, а затем становится такой, какой вы видите в моем вопросе, разве мы не можем обойти это? С фиктивной проверкой, возможно, перед вызовом 'allclose()'? – gsamaras