怎样做平台网站,医生做网站不违法,交易类网站建设功能表,湖北餐饮网站建设Numpy模块 简易使用教程1.数组创建2.数组基本属性-维度、尺寸、数据类型3.数组访问-索引、切片、迭代4.数组的算术运算-加减乘除、转置求逆、极大极小5.通用函数-sin,cos,exp,sqrtnp.dot与np.matmul的区别6.数组的合并和分割6.1 np.vstack(),np.hstack()6.2 np.stack()7.list与…
Numpy模块 简易使用教程1.数组创建2.数组基本属性-维度、尺寸、数据类型3.数组访问-索引、切片、迭代4.数组的算术运算-加减乘除、转置求逆、极大极小5.通用函数-sin,cos,exp,sqrtnp.dot与np.matmul的区别6.数组的合并和分割6.1 np.vstack(),np.hstack()6.2 np.stack()7.list与数组相互转换7.1 list() vs tolist()8.np.random8.1 randn()和rand()8.2np.random.choice()8.3 np.random.uniform()9.常用方法x.astype(int)np.squeeze()np.std()np.prob()array.copy()np.linspace()np.vstack()np.c_ ()arr.ravel()Numpy 是pythond科学计算的基础模块常被用作多维数据容器能够完成基本的科学计算操作
1.数组创建
import numpy as np# 1.创建数组
arr1 np.array([1, 2, 3])
arr2 np.array([(1.3, 9, 2.0), (7, 6, 1)])
arr3 np.zeros((2, 3))
arr4 np.identity(3) # 三维度单位阵
arr5 np.random.random(size(2, 3))2.数组基本属性-维度、尺寸、数据类型
# 2.数组属性
print(arr2.shape) # 矩阵的形状 (2, 3)
print(arr2.ndim) # 矩阵的秩 2
print(arr2.size) # 矩阵所有元素个数 6
print(arr2.dtype.name) # 矩阵中元素的类型 float643.数组访问-索引、切片、迭代
# 3.数组访问
print(arr2[:1,:1]) # [[1.3]]
for row in arr2:print(row)
for element in arr2.flat:print(element)4.数组的算术运算-加减乘除、转置求逆、极大极小
# 4.数组运算
arr9 np.array([[2, 1], [1, 2]])
arr10 np.array([[1, 2], [3, 4]])
# 逐元素的-*/%操作
print(arr9 - arr10)
print(arr9**2)
print(arr9 * 3)
print(arr9 * arr10) # 等价于 np.multiply(arr9, arr10)
print(np.dot(arr9, arr10)) # 矩阵叉积, 在二维度的情况下和矩阵乘积的结果一致
print(np.matmul(arr9, arr10)) # 矩阵乘积
# 矩阵转置求逆求和求极大求极小
print(arr9.T)
print(np.linalg.inv(arr9))
print(arr9.sum(), arr9.max(), arr9.min()) # 6 2 15.通用函数-sin,cos,exp,sqrt
# 5.通用函数sin,cos,都是针对整个数组逐元素操作
print(np.exp(arr9))
print(np.sin(arr9))
print(np.sqrt(arr9))np.dot与np.matmul的区别
在二维度的情况下和矩阵乘积的结果一致
print(np.dot(arr9, arr10)) # 矩阵叉积,
print(np.matmul(arr9, arr10)) # 矩阵乘积参考博文https://blog.csdn.net/acterminate/article/details/96151132
6.数组的合并和分割
# 6.数组的合并和分割
arr11 np.vstack((arr9, arr10)) # 纵向合并沿着第0维度合并
arr12 np.hstack((arr9, arr10)) # 横向合并沿着第1维度合并
print(np.vsplit(arr12, 2)) # 纵向切割
print(np.hsplit(arr12, 2)) # 横向切割6.1 np.vstack(),np.hstack()
np.vstack()沿着第0维度堆叠 np.hstack()沿着第1维度堆叠
只有两个维度: np.vstack(tuple)垂直方向堆叠成numpy.array np.hstack(tuple)水平方向堆叠成numpy.array
注意: tuple(a1,a2,a3,…an) a1,a2,a3,…an除了堆叠的那个维度剩余的维度尺寸要求完全一致. a1numpy.random.randn(2,2)a2numpy.random.randn(3,2)anumpy.vstack((a1,a2))a
array([[ 0.67667278, -0.3318424 ],[-0.2550355 , -0.74132559],[ 0.43534239, 1.46399303],[-0.86049107, 2.03871322],[-0.01824614, 0.46310639]]) b1numpy.random.randn(2,3)b2numpy.random.randn(2,1)bnumpy.hstack((b1,b2))b
array([[-0.69216195, 0.43455353, -0.5628851 , 1.98854944],[ 1.73648473, 1.11249471, -0.8067703 , -0.53433626]])import numpya1numpy.random.randn(2,2,2)a2numpy.random.randn(2,2,2)anumpy.vstack((a1,a2))a[0]
array([[ 0.06585097, -0.80433501],[ 1.77412345, -0.5875084 ]])bnumpy.hstack((a1,a2))b.shape
(2, 4, 2)a.shape
(4, 2, 2)
参考博文:https://blog.csdn.net/nanhuaibeian/article/details/100597342
6.2 np.stack()
stack() 函数是vstack(),与hstack()结合升级.
Parameters:
arrays : sequence of array_like
Each array must have the same shape.
axis : int, optional
The axis in the result array along which the input arrays are stacked.
out : ndarray, optional
If provided, the destination to place the result. The shape must be correct, matching that of what stack would have returned if no out argument were specified.
Returns:
stacked : ndarray
The stacked array has one more dimension than the input arrays.np.stack(tuple, axis0) 等价于 np.vstack(tuple) np.stack(tuple, axis1) 等价于 np.hstack(tuple)
参考博文:https://blog.csdn.net/u013019431/article/details/79768219
7.list与数组相互转换
list–np.array a[1,2,3] bnp.array(a) np.array-list cb.tolist() 7.1 list() vs tolist()
直接用list()函数 # 转换成 第0维的每一个元素(Numpy.array) 组成的list用array.tolist()函数 # 与原来的array的数据形式是一样的,只不过每一维度都是一个list
结论–tolist() 方法转换的更彻底list()方法只转换了源数据的第一个维度。 如果np.array是一维两者没有区别。但如果是二维结果是不同的。 import numpy a1numpy.random.rand(3)a1
array([0.26546725, 0.27424911, 0.18618962])list(a1)
[0.26546725247934855, 0.27424910895802035, 0.18618962270208705]a1.tolist()
[0.26546725247934855, 0.27424910895802035, 0.18618962270208705] a2
array([[0.25176667, 0.78656379, 0.17814966],[0.38749959, 0.195838 , 0.91929009]])list(a2)
[array([0.25176667, 0.78656379, 0.17814966]), array([0.38749959, 0.195838 , 0.91929009])]a2.tolist()
[[0.25176666870818276, 0.7865637882478266, 0.17814966253473885], [0.3874995863899837, 0.19583799515418743, 0.9192900894591074]] 参考博文:https://www.cnblogs.com/wxiaoli/p/9550382.html
8.np.random
于随机/随机数相关的一个模块。
8.1 randn()和rand()
rand()-从标准正态分布中随机抽样 randn()-从标准正态分布中随机抽样值处于[0,1]之间
import numpy
anumpy.random.randn(2)
a
array([2.14862612, 2.64967285])
bnumpy.random.randn(2,4)
b
array([[ 1.12026781, -0.35804222, 0.40199839, 0.8530957 ],[ 0.17434359, 0.77714432, -1.050777 , -1.4872941 ]])
cnumpy.random.randn(2,4,3)
c
array([[[-0.63199863, 0.3026388 , 1.52031827],[-0.02198394, 1.21513216, -0.0347614 ],[ 0.05571264, 0.38651474, -1.24363781],[-1.93182679, 1.1883758 , -1.90170175]],[[-0.65822958, 0.52109845, -0.49748048],[ 0.66535972, -0.118965 , 1.55862421],[ 0.58604542, 0.44303396, -1.27043267],[-0.26475081, 0.91481557, -0.7255539 ]]])
a1numpy.random.rand(2)
a1
array([0.29220946, 0.56908742])8.2np.random.choice()
从xxx中随机抽取元素 numpy.random.choice(a, sizeNone, replaceTrue, pNone) a : 一维数组或整数 size : 生成样本的大小 replace : bool类型 False表示样本中不允许有重复值 True… p : 给定数组中元素出现的概率
np.random.choice(5,3,p[0,0,0,0,1])
array([4, 4, 4], dtypeint64) 参考文档https://www.cnblogs.com/cavaliers20160620/p/8964784.html
8.3 np.random.uniform()
从[1,2]的均匀分布中随机采样64个数据并且将尺寸由 64转换成64,1 np.random.uniform(1, 2, size64)[:, np.newaxis] 9.常用方法
x.astype(int)
改变数组中的数据类型 xnp.array([1,2,2.5]) x.astype(int) np.squeeze()
去除中维度为1 的维 In [20]: dnp.array([[[1],[1]],[[1],[1]]]) In [22]: d.shape Out[22]: (2, 2, 1) In [23]: enp.squeeze(d) In [25]: e.shape Out[25]: (2, 2) np.std()
计算所有元素的标准差 numpy.std(data) 计算每一列的标准差 numpy.std(data, 0) 计算每一行的标准差 numpy.std(data, 1) np.prob()
返回给定维度上各个元素的乘积 import numpy as npanp.array([[2,3],[4,5]])a
array([[2, 3],[4, 5]]) np.prod(a)
120np.prod(a,axis0)
array([ 8, 15]) np.prod(a,axis1)
array([ 6, 20])array.copy()
直接名字赋值两个变量指向同一块地址其中任何一个数据操作都会影响另一个数组。用数组的.copy()方法则会建立一个与原来完全独立但是数字完全相同的一个数组。
import numpy as np
ar1 np.arange(10)
print(ar1)ar2 ar1
print(ar2 is ar1)ar1[2] 9
print(ar1,ar2)
#ar1和ar2 指向同一个值所以ar1改变ar2一起改变print(-------------------------------)ar3 ar1.copy()
print(ar3 is ar1)
ar1[0] 9
print(ar1,ar3)
#coyp方法生成数组及其数据的完整拷贝j输出结果 [0 1 2 3 4 5 6 7 8 9]True[0 1 9 3 4 5 6 7 8 9] [0 1 9 3 4 5 6 7 8 9]-------------------------------False[9 1 9 3 4 5 6 7 8 9] [0 1 9 3 4 5 6 7 8 9]参考博文https://blog.csdn.net/weixin_30935137/article/details/80822005
np.linspace()
输出-1,1之间的等间距15个数 np.linspace(-1, 1, 15) np.vstack()
写在一行的for循环每次将15个数作为一行堆叠64次生成一个64*15的矩阵 np.vstack([np.linspace(-1, 1, 15) for _ in range(64)]) np.c_ ()
np.c_ 用于连接两个矩阵 np.c 中的c 是 column(列)的缩写就是按列叠加两个矩阵就是把两个矩阵左右组合要求行数相等。 参考博文https://blog.csdn.net/qq_33728095/article/details/102512600
arr.ravel()
将多维数组转换成一维数组 a numpy.array([[1,2],[3,4]])a.ravel()
array([1, 2, 3, 4])