Я сталкиваюсь с некоторыми проблемами при использовании метода pearsonr
из SciPy. Я старался держать его как можно проще (обратите внимание на великолепный цикл N^2), но все же я сталкиваюсь с этой проблемой. Я не совсем понимаю, где я ошибаюсь. мои массивы выбираются правильно и имеют одинаковую размерность.SciPy PearsonR ValueError: значение истинности массива с более чем одним элементом неоднозначно. Используйте a.any() или a.all()
Код я бегу это:
from scipy import stats
from sklearn.preprocessing import LabelBinarizer, Binarizer
from sklearn.feature_extraction.text import CountVectorizer
ny_cluster = LabelBinarizer().fit_transform(ny_raw.clusterid.values)
ny_vocab = Binarizer().fit_transform(CountVectorizer().fit_transform(ny_raw.text.values))
ny_vc_phi = np.zeros((ny_vocab.shape[1], ny_cluster.shape[1]))
for i in xrange(ny_vc_phi.shape[0]):
for j in xrange(ny_vc_phi.shape[1]):
ny_vc_phi[i,j] = stats.pearsonr(ny_vocab[:,i].todense(), ny_cluster[:,j])[0]
Которая производит ошибку:
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
/data/TweetClusters/TweetsLocationBayesClf/<ipython-input-29-ff1c3ac4156d> in <module>()
3 for i in xrange(ny_vc_phi.shape[0]):
4 for j in xrange(ny_vc_phi.shape[1]):
----> 5 ny_vc_phi[i,j] = stats.pearsonr(ny_vocab[:,i].todense(), ny_cluster[:,j])[0]
6
/usr/lib/python2.7/dist-packages/scipy/stats/stats.pyc in pearsonr(x, y)
2201 # Presumably, if abs(r) > 1, then it is only some small artifact of floating
2202 # point arithmetic.
-> 2203 r = max(min(r, 1.0), -1.0)
2204 df = n-2
2205 if abs(r) == 1.0:
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
Я действительно не понимаю, где этот выбор происходит. Конечно, это не помогает, я не знаю, как вычисляется r-переменная. Может быть, я как-то испортил свои материалы?
Это было очень близко к моему решению, поэтому я маркировки как ответил. Для любого, кто задавался вопросом, я использовал разреженную матрицу, поэтому был включен массив, который нужно было включить. Для любого, кто задавался вопросом, строка verbatim была 'ny_vc_phi [i, j] = stats.pearsonr (np.squeeze (np.asarray (ny_vocab [:, i] .todense())), ny_cluster [:, j]) [0 ] ' –
Я собирался отредактировать вопрос и предложить« сжать »в качестве альтернативы, если проблема была просто« тривиальным »измерением, но вы избили меня. :-) –