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维度内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 详解Django admin高级用法

    详解Django admin高级用法

    这篇文章主要介绍了Django admin高级用法,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-11-11
  • Python常用数据分析模块原理解析

    Python常用数据分析模块原理解析

    这篇文章主要介绍了Python常用数据分析模块原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-07-07
  • Python torch.onnx.export用法详细介绍

    Python torch.onnx.export用法详细介绍

    这篇文章主要给大家介绍了关于Python torch.onnx.export用法详细介绍的相关资料,文中通过实例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2022-07-07
  • Python实现简单拆分PDF文件的方法

    Python实现简单拆分PDF文件的方法

    这篇文章主要介绍了Python实现简单拆分PDF文件的方法,可实现将一个PDF文件拆分成指定份数的功能,涉及pyPdf模块的使用技巧,需要的朋友可以参考下
    2015-07-07
  • Python处理百万级社保数据的性能优化秘籍

    Python处理百万级社保数据的性能优化秘籍

    这篇文章主要为大家详细介绍了Python处理百万级社保数据的性能优化技巧,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2026-01-01
  • Python函数参数和注解的使用

    Python函数参数和注解的使用

    本文介绍了Python函数的四种参数:定位参数、可变参数、默认值参数、关键字参数,和第五种Python3新特性参数:仅限关键字参数。函数注解是一种元数据,存在__annotations__属性中,备注函数的参数和返回值的类型,它只是个注解,Python不会做任何强制检查。
    2021-06-06
  • Python正则表达式re模块详解(建议收藏!)

    Python正则表达式re模块详解(建议收藏!)

    正则表达式是用来匹配与查找字符串的,从网上爬取数据自然或多或少会用到正则表达式,python的正则表达式要先引入re模块,这篇文章主要给大家介绍了关于Python正则表达式re模块的相关资料,需要的朋友可以参考下
    2022-07-07
  • python sns.countplot() 绘画条形图详情

    python sns.countplot() 绘画条形图详情

    这篇文章主要介绍了python sns.countplot()绘画条形图详情,sns.countplot()用于画类别特征的频数条形图,更多相关内容需要的朋友可以参考一下
    2022-06-06
  • Django web框架使用url path name详解

    Django web框架使用url path name详解

    这篇文章主要介绍了Django web框架使用url path name详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-04-04
  • 使用Python实现Word文档的自动化对比方案

    使用Python实现Word文档的自动化对比方案

    我们经常需要比较两个Word文档的版本差异,无论是合同修订、论文修改还是代码文档更新,人工比对不仅效率低下,还容易遗漏关键改动,下面通过一个实际案例,介绍如何使用Python快速实现Word文档的自动化对比,需要的朋友可以参考下
    2025-08-08

最新评论