形状(150,)和形状(150,1)有什么区别?

形状(150,)和形状(150,1)有什么区别?

我认为它们是相同的,我的意思是它们都代表一个列向量。


catspeake
浏览 445回答 3
3回答

MMMHUHU

两者具有相同的值,但一个是向量,另一个是向量的矩阵。下面是一个例子:import numpy as npx = np.array([1, 2, 3, 4, 5])y = np.array([[1], [2], [3], [4], [5]])print(x.shape)print(y.shape)输出是:(5,)(5, 1)

MM们

虽然它们在内存中占据相同的空间和位置,我认为它们是相同的,我的意思是它们都代表一个列向量。不,它们不是,当然也不是根据 NumPy(ndarrays)。主要区别在于shape (150,)=> 是一个一维数组,而shape (150,1)=> 是一个二维数组

慕斯709654

像这样的问题似乎来自两个误解。没有意识到这(5,)是一个 1 元素元组。期待像矩阵一样的 MATLAB使用方便的arange函数创建一个数组:In [424]: x = np.arange(5)                                                      In [425]: x.shape                                                               Out[425]: (5,)             # 1 element tupleIn [426]: x.ndim                                                                Out[426]: 1numpy不会自动生成矩阵、二维数组。在这方面它没有遵循 MATLAB。我们可以重塑该数组,添加第二维。结果是view(迟早你需要了解这意味着什么):In [427]: y = x.reshape(5,1)                                                    In [428]: y.shape                                                               Out[428]: (5, 1)In [429]: y.ndim                                                                Out[429]: 2这两个阵列的显示非常不同。相同的数字,但括号的布局和数量有很大不同,反映了各自的形状:In [430]: x                                                                     Out[430]: array([0, 1, 2, 3, 4])In [431]: y                                                                     Out[431]: array([[0],       [1],       [2],       [3],       [4]])形状差异可能看起来很学术 - 直到您尝试使用数组进行数学运算:In [432]: x+x                                                                   Out[432]: array([0, 2, 4, 6, 8])     # element wise sumIn [433]: x+y                                                                   Out[433]: array([[0, 1, 2, 3, 4],       [1, 2, 3, 4, 5],       [2, 3, 4, 5, 6],       [3, 4, 5, 6, 7],       [4, 5, 6, 7, 8]])这最终是如何产生一个 (5,5) 数组的?用 (5,1) 数组广播 (5,) 数组!
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python