Python 大小为(100,1)和(100,)的numpy数组之间有什么区别?
我有两个来自不同函数的变量,第一个Python 大小为(100,1)和(100,)的numpy数组之间有什么区别?,python,numpy,Python,Numpy,我有两个来自不同函数的变量,第一个a是: <class 'numpy.ndarray'> (100,) <class 'numpy.ndarray'> (100, 1) 如果我试图通过以下方式将它们关联起来: from scipy.stats import pearsonr p, r= pearsonr(a, b) 我得到: r = max(min(r, 1.0), -1.0) ValueError: The truth value of an array
a
是:
<class 'numpy.ndarray'>
(100,)
<class 'numpy.ndarray'>
(100, 1)
如果我试图通过以下方式将它们关联起来:
from scipy.stats import pearsonr
p, r= pearsonr(a, b)
我得到:
r = max(min(r, 1.0), -1.0)
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
我的问题是:
您需要在第一个数组上调用整形函数以
。整形((100,1))
整形将更改np数组的“shape”属性,这将使1D数组[1,2,3,…,100]变为2D数组[[1],[2],[3],…[100](100,1)是长度为1的行的2D数组,如=[1],[2],[3],[4]]
第二个是1d数组[1,2,3,4]
a1 = np.array([[1],[2],[3],[4]])
a2 = np.array([1, 2, 3, 4 ])
第一个问题的答案:
a
是一个向量,b
是一个矩阵。查看此stackoverflow链接了解更多详细信息:
第二个问题的答案:
我认为将一种形式转换为另一种形式应该很好。对于您提供的函数,我想它需要向量,因此只需使用b=b来重塑b。重塑(-1)
将其转换为单个维度(向量)。请看以下示例以供参考:
>>将numpy作为np导入
>>>从scipy.stats导入pearsonr
>>>a=np.random.random((100,))
>>>b=np.随机.随机((100,1))
>>>打印(a.形状,b.形状)
(100,) (100, 1)
>>>p,r=pearsonr(a,b)
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
文件“C:\Users\xyz\Appdata\Local\Continuum\Anaconda3\lib\site packages\scipy\stats\stats.py”,第3042行,在pearsonr中
r=最大值(最小值(r,1.0),-1.0)
ValueError:包含多个元素的数组的真值不明确。使用a.any()或a.all()
>>>b=b。重塑(-1)
>>>p,r=pearsonr(a,b)
>>>打印(p,r)
0.10899671932026986 0.280372238354364
的可能重复为了提供更好的答案,您应该解释原因。