Numpy维度知识总结

 更新时间:2023年09月23日 10:29:11   作者:一只菜得不行的鸟  
这篇文章主要介绍了Numpy维度知识总结,因为在numpy里一维既可以做行向量也可以做列向量,那对于任意一个给定的一维向量,我们就无法确定他到底是行向量还是列向量,为了防止这种尴尬的境地,习惯上用二维矩阵而不是一维矩阵来表示行向量和列向量,需要的朋友可以参考下

1、维度究竟是行数还是列数?

机器学习时总听到m维行向量、n维列向量。究竟维度是啥?这里的维度和numpy中一样嘛?

答案:不一样。

  • m维行向量:m维表示一行中有m列,由于是行向量,所以是1行m列
  • n维列向量:n维表示一行中有n行,由于是列向量,所以是n行1列
  • m维向量:看书的习惯了,一般书籍开头会说此本书以列向量为基准,那m维向量就指m维列向量了
  • 矩阵:一般不说是几维,矩阵的表示一般就是dm。所以m维行向量也可以看作是m1的矩阵,n维列向量也可以看作是1*n的矩阵

但在numpy中维度概念不一样啊。numpy中维度就是平常所说的一维(只有x轴)、二维(x、y轴)、三维(x、y、z轴)…numpy中如何表示零维标量、一维、二维、三维等等?

标量print后只有一个数字 一维print后有一对花括号 [ ] 二维print后有两对 [ [] ] 三维print后有三对[ [ [] ] ] 依次类推…

注意,list里面也是同样规则。但list 和 ndarray背后有很大区别

import numpy as np
a = 12
print("a : ", a)
print("shape of a : ", np.shape(a))   #标量,0维
print("type of a : ",type(a))
print("_____________________________________")
b = np.array(12)
print("b : ", b)
print("shape of b : ", np.shape(b))   #标量,0维
print("type of b : ",type(b))
print("_____________________________________")
c = [12]
print("c : ", c)
print("shape of c : ", np.shape(c))   #一维向量
print("type of c : ",type(c))
print("_____________________________________")
d = np.array([12])
print("d : ", d)
print("shape of d : ", np.shape(d))   #一维向量
print("type of d : ",type(d))
print("_____________________________________")
e = np.array([12,13])
print("e : ", e)
print("shape of e : ", np.shape(e))   #一维向量
print("type of e : ",type(e))
print("_____________________________________")
f = np.arange(0, 20)
print("f : ", f)
print("shape of f : ", np.shape(f))   #一维向量
print("type of f : ",type(f))
print("_____________________________________")
g = np.array([[11],[12]])
print("g : ", g)
print("shape of g : ", np.shape(g))   #二维向量
print("type of g: ",type(g))

输出:

a : 12 shape of a : () type of a : <class ‘int’>

b : 12 shape of b : () type of b : <class ‘numpy.ndarray’>

c : [12] shape of c : (1,) type of c : <class ‘list’>

d : [12] shape of d : (1,) type of d : <class ‘numpy.ndarray’>

e : [12 13] shape of e : (2,) type of e : <class ‘numpy.ndarray’>

f : [ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19] shape of f : (20,) type of f : <class ‘numpy.ndarray’>

g : [[11] [12]] shape of g : (2, 1) type of g: <class ‘numpy.ndarray’>

2、shape又是什么?

形状呗。用 .shape 属性就能查看,或者 np.shape() 函数 也行。

  • () 表示零维。
  • (20,) 表示1维。区别(20),(20)python里等价于20。
  • (2,3) 表示2维。也就是所谓的矩阵了。线代里喜欢用 2*3 表示
  • (1,2,3) 表示3维。维度从右到左依次增高。

注意:

列向量或行向量即可看作一维,又可看作二维。例如[1,1,1]: 1、(3,) 即一维 2、(1,3)即二维,1*3的矩阵

3、一维和二维初始化

常使用一维和二维,所以说一下初始化以及背后的转化。

3.1、初始化

import numpy as np
import pandas
# 1、np.array()初始化,传入一个list即可。
a1 = np.array(12)                             #0维,()
a2 = np.array([12])                           #1维,(1,)
a3 = np.array([12,13])                        #1维,(2,)
a4 = np.array([[12,13], [14,15]])             #2维,(2,2)
# 此函数在pandas.read_csv()导入数据集后得用
# df = pandas.read_csv('temperature_dataset.csv')
# data = np.array(df)
# 2、np.arange()初始化,只能初始化1维。传入start、stop、步长
b1 = np.arange(3, 7, 0.5)                      #1维
# 3、np.linspace()初始化,也是只能初始化1维
c1 = np.linspace(3, 7, num=5)                  #1维
# 4、np.zeros()初始化,传入shape。创建一个全是0的数组
d1 = np.zeros(5)                               #1维
print(d1)  
d2 = np.zeros((5,))                            #1维,和上面等价
print(d2)
d4 = np.zeros(2,3)                             #报错!!!
print(d4)
d3 = np.zeros((2,3))                           #2维
print(d3)

3.2、常用的行向量、列向量初始化

上面已经说了,行列向量既可以看作是一维,也可以看作是二维。所以都行两个不同维度初始化都行,不用纠结。

只是按照不同维度创建后需要很清楚背后的运算。 例如np.dot() 点积运算,如果不清楚自己当初设的是一维还是二维,那很有可能报错。

我习惯用二维表示。

因为在numpy里一维既可以做行向量也可以做列向量,那对于任意一个给定的一维向量,我们就无法确定他到底是行向量还是列向量,为了防止这种尴尬的境地,习惯上用二维矩阵而不是一维矩阵来表示行向量和列向量,因为二维必定能够确定他是行向量还是列向量。 

3.3、高维如何降到低维?

最常用的就是二维如何转化成一维。

  • np.reshape()函数
  • np.squeeze()函数
  • np.flatten()函数
  • np.ravel()函数

4、为啥搞清维数那么重要?

原因如下:

1、划分数据集就很重要

2、很多公式的推导对应背后的代码,常常就是由于维度不匹配报错,

3、是用matlibplot画图时本该传一维当作x、y,但误传了二维导致无法正常画图

4、就是广播操作时也需要清楚维度,否则可能因为不满足广播的维度而报错。

到此这篇关于Numpy维度知识总结的文章就介绍到这了,更多相关Numpy维度内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • python操作excel让工作自动化

    python操作excel让工作自动化

    这篇文章主要为大家详细介绍了python如何操作excel让工作自动化,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-08-08
  • Django Form常用功能及代码示例

    Django Form常用功能及代码示例

    这篇文章主要介绍了Django Form常用功能及代码示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-10-10
  • python Spyder界面无法打开的解决方法

    python Spyder界面无法打开的解决方法

    下面小编就为大家分享一篇python Spyder界面无法打开的解决方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-04-04
  • Python如何使用logging为Flask增加logid

    Python如何使用logging为Flask增加logid

    这篇文章主要介绍了Python如何使用logging为Flask增加logid,帮助大家更好的理解和学习使用python,感兴趣的朋友可以了解下
    2021-03-03
  • Python基础语法之容器详解

    Python基础语法之容器详解

    这篇文章主要介绍了Python基础语法之容器的相关资料,帮助大家更好的理解和学习python,感兴趣的朋友可以了解下,希望能够给你带来帮助
    2021-09-09
  • Python操作Excel之xlsx文件

    Python操作Excel之xlsx文件

    前段时间做一个项目,不得不使用Python直接生成Excel文件,后来随着需求的变化,还要对已有的Excel文件进行读取。所以想着记录下来,这篇文章主要给大家介绍了Python操作Excel之xlsx文件的相关资料,需要的朋友可以参考下。
    2017-03-03
  • Python中Parser的用法小结

    Python中Parser的用法小结

    argparse 模块还会自动生成帮助和使用手册,并在用户给程序传入无效参数时报出错误信息,本文给大家介绍Python中Parser的用法小结, 感兴趣的朋友一起看看吧
    2023-12-12
  • 用python实现打砖块小游戏

    用python实现打砖块小游戏

    这篇文章主要为大家详细介绍了用python实现打砖块小游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-05-05
  • Python列表pop()函数使用实例详解

    Python列表pop()函数使用实例详解

    这篇文章主要介绍了Python列表pop()函数使用实例详解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-07-07
  • pandas实现导出数据的四种方式

    pandas实现导出数据的四种方式

    这篇文章主要介绍了pandas实现导出数据的四种方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12

最新评论