3 回答

TA贡献1834条经验 获得超8个赞
两者具有相同的值,但一个是向量,另一个是向量的矩阵。下面是一个例子:
import numpy as np
x = np.array([1, 2, 3, 4, 5])
y = np.array([[1], [2], [3], [4], [5]])
print(x.shape)
print(y.shape)
输出是:
(5,)
(5, 1)

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

TA贡献1840条经验 获得超5个赞
像这样的问题似乎来自两个误解。
没有意识到这(5,)是一个 1 元素元组。
期待像矩阵一样的 MATLAB
使用方便的arange函数创建一个数组:
In [424]: x = np.arange(5)
In [425]: x.shape
Out[425]: (5,) # 1 element tuple
In [426]: x.ndim
Out[426]: 1
numpy不会自动生成矩阵、二维数组。在这方面它没有遵循 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 sum
In [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,) 数组!
添加回答
举报