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]]