Numpy SciPy PearsonR ValueError:包含多个元素的数组的真值不明确。使用a.any()或a.all()

Numpy SciPy PearsonR ValueError:包含多个元素的数组的真值不明确。使用a.any()或a.all(),numpy,pandas,scipy,scikit-learn,Numpy,Pandas,Scipy,Scikit Learn,我在使用SciPy的pearsonr方法时遇到了一些问题。我试图让它尽可能简单(注意华丽的N^2循环),但仍然遇到了这个问题。我不完全明白我错在哪里。我的数组被正确选择,并且具有相同的维度 我运行的代码是: from scipy import stats from sklearn.preprocessing import LabelBinarizer, Binarizer from sklearn.feature_extraction.text import CountVectorizer n

我在使用SciPy的
pearsonr
方法时遇到了一些问题。我试图让它尽可能简单(注意华丽的N^2循环),但仍然遇到了这个问题。我不完全明白我错在哪里。我的数组被正确选择,并且具有相同的维度

我运行的代码是:

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()
---------------------------------------------------------------------------
ValueError回溯(最近一次调用上次)
/数据/TweetClusters/TweetsLocationBayesClf/in()
3对于X范围内的i(ny_vc_phi.形状[0]):
4对于X范围内的j(ny_vc_phi.形状[1]):
---->5 ny_vc_phi[i,j]=stats.pearsonr(ny_vocab[:,i].todense(),ny_cluster[:,j])[0]
6.
/pearsonr(x,y)中的usr/lib/python2.7/dist-packages/scipy/stats/stats.pyc
2201#假设,如果abs(r)>1,那么它只是浮动的一些小伪影
2202点运算。
->2203 r=最大值(最小值(r,1.0),-1.0)
2204 df=n-2
2205如果abs(r)==1.0:
ValueError:包含多个元素的数组的真值不明确。使用a.any()或a.all()

我真的不明白这个选择是怎么回事。当然,我不知道r变量是如何计算出来的,这对我没有帮助。可能是我把输入搞乱了吗?

检查
pearsonr
的参数是否是一维数组。也就是说,无论是
ny_vocab[:,i].todense()
还是
ny_cluster[:,j]
都应该是1-d。尝试:

    ny_vc_phi[i,j] = stats.pearsonr(ny_vocab[:,i].todense().ravel(), ny_cluster[:,j].ravel())[0]

(我为
pearsonr
的每个参数添加了对
ravel()
的调用)

这与我的解决方案非常接近,因此我将其标记为已回答。对于任何想知道的人来说,我使用的是稀疏矩阵,因此需要包括一个数组强制转换。对于任何想知道的人来说,这行逐字逐句是
ny\u vc\u phi[i,j]=stats.pearsonr(np.squence(np.asarray(ny\u vocab[:,i].todense()),ny\u cluster[:,j])[0]
我正要编辑这个问题,并建议
squence
作为替代方案,如果这个问题仅仅是一个“琐碎”维度,但你比我先解决了。:-)