当前位置: 首页 > article >正文

Numpy 数组及矩阵创建详解

基本数组创建方式

numpy中的主要数据类型为ndarray类型,也可以称之为数组,其在内存中是连续存储的.numpy底层大多C语言进行编写,所以运行效率较高,并且numpy库支持并行计算,如矩阵乘法以及其他线性代数操作

np.array()

np.array()是numpy中最为基础和常用的创建数组的方式,其可以接受列表或者元组作为参数传入进行数组创建

import numpy as np

data1 = np.array([1,2,3])
print(data1)
print(type(data1))
# [1 2 3]
# <class 'numpy.ndarray'>

 需要注意,在进行数组创建的时候,可以指定创建数组的元素数据类型,只需要指定参数dtype就可以,常用的有np.float32,np.float64,np.int32,np.int64,在numpy中,整形和浮点型默认为int32和float64

import numpy as np

data1 = np.array([1,2,3],dtype=np.float32)
print(data1)
# [1. 2. 3.]

在创建完数组后,若想要更改数组的元素数据类型,可以使用astype()进行更改数据类型,参数为要更改的数据类型,注意在进行类型更改需要重新赋值,这里不会默认覆盖

import numpy as np

data1 = np.array([1,2,3],dtype=np.float32)
print(data1)
data1 = data1.astype(np.int64)
print(data1)
# [1. 2. 3.]
# [1 2 3]

 

基本二维矩阵创建方式

np.array()

np.array()可以用于一维数组和高维矩阵的创建,所以是相当通用的一种方法,需要注意,在numpy中创建高维矩阵,也就是高维数组,要求所有维度的大小必须相等.

import numpy as np

data1 = np.array([[1,2,3],[4,5,6]],dtype=np.float32)
print(data1)
# [[1. 2. 3.]
#  [4. 5. 6.]]
np.mat()/np.matrix()

这里把np.mat()和np.matrix()放在一起,是因为这两个函数都是用于创建二维矩阵,切在功能性上二者并无区别,使用哪个函数看个人习惯

import numpy as np

data1 = np.mat([[1,2,3],[4,5,6]],dtype=np.float32)
print(data1)
print(type(data1))
# [[1. 2. 3.]
#  [4. 5. 6.]]
# <class 'numpy.matrix'>

mat()和matrix()还支持参数类型为字符串,格式为"a b;c d" ,这样会创建[[a,b],[c,d]]的矩阵

import numpy as np

data1 = np.mat('1 2 3;4 5 6')
print(data1)
# [[1 2 3]
#  [4 5 6]]


可以看到使用mat()和matrix()函数创建出来的变量类型为numpy.matrix而不是ndarray,需要注意,这两个函数只能创建二维矩阵,不能创建更高维的矩阵,与ndarray的较为明显的区别在于矩阵乘法运算,numpy中常用的运算函数会在下一篇博客更新,但是这里更推荐使用ndarray类型的数组或矩阵,matrix通用性较差

随机数组创建方式

numpy中的随机数组生成函数都集中在np.random模块中

np.random.rand()

np.random.rand()用于创建具有处于[0,1)中的均匀分布的值的数组,参数为想要创建的数组的shape

import numpy as np

data1 = np.random.rand(2,3,3)
print(data1)
# [[[0.94574906 0.38356061 0.57587797]
#   [0.25380591 0.62958842 0.58219202]
#   [0.32493826 0.90480052 0.6395252 ]]
# 
#  [[0.98839104 0.79301215 0.74439871]
#   [0.12027667 0.31407121 0.21150651]
#   [0.08862386 0.8341699  0.34966745]]]
np.random.randn()

np.random.randn()函数用于创建均值为0房差为1的符合高斯分布的数组,参数也是想要创建数组的shape,需要注意,均值为0房差为1只是近似,有时会出现偏差,生成的值基本都集中在0附近

import numpy as np

data1 = np.random.randn(2,3,3)
print(data1)
# [[[-0.70440759 -0.10907671  0.22013064]
#   [ 0.10868323  0.79157001  0.55431646]
#   [ 1.07249444 -1.75549428 -1.37090188]]
# 
#  [[-1.29439354 -0.68123971  1.00515311]
#   [ 0.52781018 -1.13052502 -1.2176601 ]
#   [-1.11574164  0.48404165 -0.49111685]]]

np.random.uniform()

np.random.uniform()函数用于创建具有均匀分布属性的数组,参数有low,high,size,dtype,生成的值处于[low,high)区间,size为生成的数组的形状

import numpy as np

data1 = np.random.uniform(low = 0,high = 10,size = (2,3))
print(data1)
# [[6.91073289 8.78237297 7.04289457]
#  [8.19083172 5.46516624 4.85915078]]
np.random.normal()

np.random.normal()函数用于创建具有正太分布属性的数组,参数有loc,scale,size,dtype,其中loc代表均值,scale代表标准差,size为形状,loc默认为0,scale默认为1

import numpy as np
from numpy import dtype

data1 = np.random.normal(size = (2,3))
data2 = np.random.normal(loc = 1, scale = 3, size = (2,3))
print(data1)
print(data2)
# [[-1.81691015 -0.41976602  0.01175184]
#  [-0.57078899  0.36689629  0.51743499]]
# [[-0.74949562 -1.87051077 -0.5765881 ]
#  [-5.05718016 -0.29484111  2.59209103]]

其他常用的数组创建方式

np.arange()

np.arange()用于创建序列数组,可以设置参数包括start,stop,step分别是起始位置,终止位置和步长,这里类似于python中的range()函数,其中start默认为0,stop是必须设置的参数,step默认为1,np.arange(n)默认会创建包括[0,n)的数组,包含头,不包含尾,并且arange()函数也可以设置dtype

import numpy as np

data1 = np.arange(start=1,stop=10,step=2,dtype=np.float32)
data2 = np.arange(10)
print(data1)
print(data2)
# [1. 3. 5. 7. 9.]
# [0 1 2 3 4 5 6 7 8 9]
np.linspace()

np.linspace()函数是用于创建等差数组的函数,参数包括start,stop,num,dtype,以及endpoint分别为起始位置,终止位置,以及要生成的等差数组的元素数量,最后dtype为元素类型,endpoint为是否包含stop

import numpy as np

data1 = np.linspace(start=1,stop=10,num=10,dtype=np.float32,endpoint=True)
print(data1)
# [ 1.  2.  3.  4.  5.  6.  7.  8.  9. 10.]



np.logspace()

np.linspace()函数是用于创建等比数组的函数,参数包括start,stop,num,dtype,分别为起始位置,终止位置,以及要生成的等差数组的元素数量,最后dtype为元素类型,endpoint为是否包含stop,相比linspace多出了一个参数base,也就是底数,默认为10

import numpy as np

data1 = np.logspace(start=1,stop=10,num=10,dtype=np.float32,endpoint=True)
data2 = np.logspace(start=1,stop=10,num=10,dtype=np.float32,endpoint=True,base =2)
print(data1)
print(data2)
# [1.e+01 1.e+02 1.e+03 1.e+04 1.e+05 1.e+06 1.e+07 1.e+08 1.e+09 1.e+10]
# [   2.    4.    8.   16.   32.   64.  128.  256.  512. 1024.]



np.zeros()

np.zeros()用于创建全零数组,参数为shape(形状)和dtype

import numpy as np

data1 = np.zeros(shape = (2,3),dtype = np.int32)
print(data1)
# [[0 0 0]
#  [0 0 0]]
np.ones()

np.ones()用于创建全一数组,参数与np.zeros()相同

import numpy as np

data1 = np.ones(shape = (2,3),dtype = np.int32)
print(data1)
# [[1 1 1]
#  [1 1 1]]
np.empty()

np.empty()是用于创建空数组的函数,参数仍与np.zeros()相同,值取决于当前的内存状态

import numpy as np

data1 = np.empty(shape = (2,3),dtype = np.int32)
print(data1)
# [[         0          0          0]
#  [1071644672          0 1072693248]]


http://www.kler.cn/a/282664.html

相关文章:

  • 计算机网络HTTP——针对实习面试
  • ETH挖矿显卡超频信息汇总
  • CSS 响应式设计之媒体查询技术
  • 入侵检测算法平台部署LiteAIServer视频智能分析平台行人入侵检测算法:科技守护安全的新篇章
  • RabbitMQ轻松构建高效可靠的消息队列系统
  • 算法训练(leetcode)二刷第二十六天 | *452. 用最少数量的箭引爆气球、435. 无重叠区间、*763. 划分字母区间
  • 在 PyTorch 中,`permute` 方法是一个强大的工具,用于重排张量的维度。
  • 一文认识大数据的CAP原则和BASE原则
  • sheng的学习笔记-AI-半监督SVM
  • Axure RP下载+详细安装步骤资源百度云盘分享
  • 求助(必关)
  • MS1861 宏晶微 视频显示与控制器芯片 提供开发资料
  • 【JupyterLab】pip安装过程问题记录(未完)
  • PyTorch深度学习实战(26)—— PyTorch与Multi-GPU
  • JSP简述
  • 数据结构-单链表-详解-1
  • 外包干了两年,快要废了。。。
  • react学习之useState和useEffect
  • java一键生成数据库说明文档html格式
  • 多项目同时进行:如何做好进度管理
  • 阿里龙晰系统上将yum安装的myql_8.0.36升级到mysql_8.4.0的过程
  • Ubuntu下修改Ollama的模型存储路径
  • Qt与SVG
  • Vue3-win7搭建vue3环境
  • FGF23:家族靶向治疗先行者
  • 【Rust光年纪】保护用户数据安全隐私:探秘Rust机密计算与安全库