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

时间:2019-03-27 09:49:18

标签: python numpy

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

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

3 个答案:

答案 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个元素的元组。
  • 像矩阵一样期待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,)数组!