Numpy 数组及矩阵创建详解

基本数组创建方式

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

np.array()

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

python 复制代码
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

python 复制代码
import numpy as np

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

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

python 复制代码
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中创建高维矩阵,也就是高维数组,要求所有维度的大小必须相等.

python 复制代码
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()放在一起,是因为这两个函数都是用于创建二维矩阵,切在功能性上二者并无区别,使用哪个函数看个人习惯

python 复制代码
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]]的矩阵

python 复制代码
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

python 复制代码
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附近

python 复制代码
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为生成的数组的形状

python 复制代码
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

python 复制代码
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

python 复制代码
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

python 复制代码
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

python 复制代码
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

python 复制代码
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()相同

python 复制代码
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()相同,值取决于当前的内存状态

python 复制代码
import numpy as np

data1 = np.empty(shape = (2,3),dtype = np.int32)
print(data1)
# [[         0          0          0]
#  [1071644672          0 1072693248]]
相关推荐
zhangfeng11335 小时前
python numpy pytorch tensorlfow list 转tenser float 32的方法,模型计算基本用的都是float32,需要转换
pytorch·python·numpy
Trouvaille ~5 小时前
【Python篇】NumPy完整指南(上篇):掌握数组、矩阵与高效计算的核心技巧
python·机器学习·数学建模·数据分析·numpy·科学计算·大数据处理
sz66cm9 小时前
数学基础 -- 线性代数之奇异值
人工智能·线性代数·机器学习
qq_435070781 天前
【机器学习】11——矩阵求导
机器学习·矩阵
985小水博一枚呀1 天前
【混淆矩阵】Confusion Matrix!定量评价的基础!如何计算全面、准确的定量指标去衡量模型分类的好坏??
人工智能·python·深度学习·线性代数·矩阵·分类·cnn
985小水博一枚呀1 天前
【深度学习|PyTorch】基于 PyTorch 搭建 U-Net 深度学习语义分割模型——附代码及其解释!
网络·人工智能·pytorch·python·深度学习·conda·numpy
tangfuling19911 天前
Games101笔记-线性代数(一)
笔记·线性代数
码农小苏241 天前
力扣刷题--73. 矩阵置零【中等】
算法·leetcode·矩阵
aimmon1 天前
深度学习之微积分预备知识点
人工智能·深度学习·线性代数·微积分
RaidenQ1 天前
2024.9.13 Python与图像处理新国大EE5731课程大作业,SIFT 特征和描述符,单应性矩阵透视变换
图像处理·python·矩阵·sift