shape(150,)和shape(150,1)有什么区别?
我认为它们是相同的,我的意思是它们都代表列向量。
答案 0 :(得分:3)
两者都具有相同的值,但是一个是向量,另一个是向量的矩阵。这是一个示例:
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)
答案 1 :(得分:0)
尽管它们都在内存中占据相同的空间和位置,
我认为它们是相同的,我的意思是它们都代表列向量。
不,根据NumPy(ndarrays),它们不是,当然也不是。
主要区别在于
shape (150,)
=>是一维数组,而
形状(150,1)
=>是2D数组
答案 2 :(得分:0)
这样的问题来自两个误解。
(5,)
是1个元素的元组。 使用方便的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,)数组!