Python——Numpy模块

导入模块

 import numpy

凡是该模块的命令(比如array)都要加上numpy成为numpy.array

简写形式:  输入时敲入  import numpy as np numpy.array   →   np.array.

如果需要非常完整、系统地学习操作手册,大家可以参考 https://docs.scipy.org/doc/numpy/reference/

数组创建

import numpy as np
np.array([1, 2, 3, 4], dtype=‘float32’)    #从Python列表创建
np.zeros(10,dtype=int)      #创建一个长度为10,值都是0的数组
np.ones((3,5),dtype=float)  #创建一个3*5的浮点型数组,值都是1
np.linspace(0,1,5)   #创建一个5元素数组,这5个数均匀分配到0-1
np.random.random((3,3))     #创建一个3*3,在0-1均匀分布的随机数构成的数组
np.random.normal(0,1,(3,4))   # 创建一个3*4,均值为0、标准差为1的正态分布随机数数组
np.eye(3)    # 创建一个3*3的单位矩阵

数据文件存取

import numpy as np
x = np.random.randn(25,5)
np.savetxt('tabs.txt',x)       #存成制表符分隔的文件
np.savetxt('commas.csv',x,delimiter=',')   #存成逗号分隔的文件(如csv)
u = np.loadtxt('commas.csv',delimiter=',')   #读取逗号分隔文件
v = np.loadtxt('tabs.txt')     #读取制表符分隔文件

矩阵和数组

import numpy as np
y = np.array([[[1,4,7],[2,5,8]],[[3,6,9],[10,100,1000]]])
print (y)
print(“y ndim:”,y.ndim,np.ndim(y))   #维度
print(“y shape:”, y.shape,np.shape(y))   #每个维度大小
print(“y size:”, y.size,np.size(y))   #数组的总大小
print(“y type:”, y.dtype,type(y))   #数组的数据类型;整个y的类型
y[0,1,2]
y[0,1,-1]
y[0,1,:]
print(y[0,1,2], y[0,1,-1], y[0,1,:])
y[0,1,2]=-99 #索引方式修改元素值
print(y)
y[0,1,2]=-99.233333#Numpy数组为固定类型,浮点值会被自动截短为整型
print(y)

数组运算

基本操作
import numpy as np
u = [0, 1, 2];v=[5,2,7]
u=np.array(u);v=np.array(v)
print (u.shape,v.shape)
print (u+v,u/v,np.dot(u,v))
u = [0.0, 1, 2];v=[5,2,7]
u=np.array(u);v=np.array(v);  print (u+v,u/v);  
print (v/3, v/3.,v/float(3),(v-2.5)**2)

x=np.arange(3,5,.5)
y=np.arange(4)
print (x,y,x+y,x*y) #向量计算
print (x[:,np.newaxis].dot(y[np.newaxis,:]))
print (np.shape(x),np.shape(y))
print (np.shape(x[:,np.newaxis]),np.shape(y[np.newaxis,:]))
print (np.dot(x.reshape(4,1),y.reshape(1,4)))

print (np.dot(x.T,y.T), x.T.dot(y.T))#x.T是x的转置
print (x.reshape(2,2).dot(np.reshape(y,(2,2))))
x=[[2,3],[7,5]]
z = np.asmatrix(x)
print (z, type(z));print (z.transpose() * z )
print (z.T*z== z.T.dot(z),z.transpose()*z==z.T*z)
print (np.ndim(z),z.shape)

练习π的近似

π=4(1−1/3+1/5−1/7+1/9−1/11+…)=4(1+1/5+1/9+1/13…)−4(1/3+1/7+1/11+…)

positive_term_denominators = np.arange(1, 1e6, 4)
positive_terms = 1 / positive_term_denominators 
negative_terms = 1 / (positive_term_denominators + 2) 
4 ∗ (sum(positive_terms) − sum(negative_terms))  

 π=2·(2/1·2/3·4/3·4/5·6/5·6/7···)=2·(2/1·4/3·6/5···10^6/999999)(2/3·4/5·6/7···10^6/10^6+1)

even = np.arange(2,1000001,2)
one_below_even = even – 1
one_above_even = even + 1
2 * np.prod(even/one_below_even)*np.prod(even/one_above_even)

数组运算

比较操作
x = np.array([[1, 2, 3, 4, 5],[6, 7, 8, 9, 10]])
print('x < 3:',x < 3)   # np.less(x, 3)
print('x >= 3:',x >= 3)
print('x != 3:',x != 3)
OperatorEquivalent ufuncOperatorEquivalent ufunc
==np.equal!=np.not_equal
<np.less<=np.less_equal
>np.greater>=np.greater_equal
统计记录个数
x = np.array([[1, 2, 3, 4, 5],[6, 7, 8, 9, 10]])
np.count_nonzero(x < 6)  # how many values less than 6?
np.sum(x < 6)   # same as np.count_nonzero()
np.sum(x < 6, axis=1)   # how many values less than 6 in each row?
np.any(x > 8)   # are there any values greater than 8?
np.all(x == 10)  # are all values equal to 10?
np.sum((x > 5) & (x < 8))  
np.std(x, axis=1)  
x[x < 5]  # 返回满足条件的值
np.where(x<5,-1,x) #将x中小于5的数值全部替换为-1
np.argmax(X)  #以行优先,输出位置
排序
import numpy as np
x = np.array([2, 1, 4, 3, 5])
np.sort(x)  # 不修改原始输入数组x
x.sort();print(x)  # 替代原始数组x
i = np.argsort(x);print(i)  # 原始数组排好序的索引值
x[i]  # 按照索引来排好序的数组
rng = np.random.default_rng(seed=42)
X = rng.integers(0, 10, (4, 6));print(X)
np.sort(X, axis=0) #按列排序 
按行或列合并矩阵
x = np.array([[1.0,2.0],[3.0,4.0]])
y = np.array([[5.0,6.0],[7.0,8.0]])
z = np.concatenate((x,y),axis = 0)
z1 = np.concatenate((x,y),axis = 1)
print (z,"\n" ,z1,"\n",z.transpose()*z1)
z = np.vstack((x,y))  # Same as z = concatenate((x,y),axis = 0)
z1 = np.hstack((x,y))
 print (z,"\n",z1)
抽取数组(矩阵)的子数组
print (np.ogrid[0:3,0:2:.5],'\n',np.mgrid[0:3,0:2:.5])
print (np.ogrid[0:3:3j,0:2:5j],'\n',np.mgrid[0:3:3j,0:2:5j])
x = np.reshape(np.arange(25.0),(5,5))
print ('x=\n',x)
print ('np.ix_(np.arange(2,4),[0,1,2])=\n',np.ix_(np.arange(2,4),[0,1,2]))
分割数组
x = np.reshape(np.arange(24),(4,6))
y = np.array(np.vsplit(x,2))
z = np.array(np.hsplit(x,3))
print ('x={}\ny={}\nz={}'.format(x,y,z))
print (x.shape,y.shape,z.shape)
print (np.delete(x,1,axis=0))       #删除x第2行
print (np.delete(x,[2,3],axis=1))   #删除x第3,4列
print (x.flat[:], x.flat[:4])       #把x变成向量
矩阵的对角线元素与对角线矩阵
x = np.array([[10,2,7],[3,5,4],[45,76,100],[30,2,0]])          
y=np.diag(x)           #对角线元素
print ('x={}\ny={}'.format(x,y))
print ('np.diag(y)=\n',np.diag(y)) #由向量形成对角线方阵
print ('np.triu(x)=\n' ,np.triu(x))  #x上三角阵
print ('np.tril(x)=\n',np.tril(x))   #x下三角阵

随机数的产生

print(np.random.randn(2,3))   #随机标准正态2×3矩阵   #给定均值矩阵和标准差矩阵的随机正态矩阵:
print (np.random.normal([[1,0,3],[3,2,1]],[[1,1,2],[2,1,1]]))
print (np.random.normal((2,3),(3,1)))  #均值为2,3标准差为3,1的2个随机正态数
print (np.random.uniform(2,3))   #均匀U[2,3]随机数
np.random.seed(1010)         #随机种子
print (np.random.random(10)) #10个随机数(0-1之间)
print (np.random.randint(20,100))   #20到100之间的随机整数
print (np.random.randint(20,100,10))   #20到100之间的10个随机整数
print (np.random.choice(np.arange(-10,10,3)))   #从序列随机选一个
x=np.arange(10);np.random.shuffle(x);print (x)

线性代数运算

x=np.random.randn(3,3)
print (np.linalg.det(x))      #行列式
y=np.random.randn(3)
print (np.linalg.solve(x,y))  #解联立方程
u,s,v= np.linalg.svd(x)       #奇异值分解
print ('x inverse=', np.linalg.inv(x))        #矩阵的逆

task

固定随机数种子为2024,生成12个服从均值为0.5,方差为1正态分布的随机数,命名为x与12个服从[0,1]上均匀分布的随机数,命名为y。

把x构造成3行, 4列的矩阵; 把y构造成4行, 3列的矩阵。

把两个矩阵相乘;

把x和y的转置点乘。找出x最大值所在的位置。

删去x第3列;  对x求逆;  将x所有大于0.5的元素定义为0 取出x矩阵的对角线元素。

对x的行求和; 对x的列求标准差。

import numpy as np
np.random.seed(2024) # 固定随机数种子
x = np.random.normal(loc=0.5, scale=1, size=12) # 生成服从均值为0.5,方差为1的正态分布随机数
y = np.random.uniform(0, 1, 12) # 生成服从[0,1]上均匀分布的随机数
x_matrix = np.reshape(x, (3, 4))      y_matrix = np.reshape(y, (4, 3))
matrix_multiply = np.dot(x_matrix, y_matrix) # 矩阵相乘
transpose_dot_product = x_matrix.T* y_matrix # x和y的转置点乘
max_position = np.unravel_index(np.argmax(x_matrix), x_matrix.shape) # 找出x最大值所在的位置
x_deleted_col = np.delete(x_matrix, 2, axis=1) # 删除x第3列
x_inverse = np.linalg.inv(x_deleted_col) # 对x求逆
x_thresholded = np.where(x_deleted_col > 0.5, 0, x_deleted_col) # 将x所有大于0.5的元素定义为0
x_diagonal = np.diag(x_thresholded) # 取出x矩阵的对角线元素
row_sum_x = np.sum(x_thresholded, axis=1) # 对x的行求和
column_std_x = np.std(x_thresholded, axis=0) # 对x的列求标准差
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值