文章目录
Numpy
矩阵初始化、生成等基础操作
矩阵形状、类型
import numpy as np
vector = np.array([
[1,2,3,4],
[23,4,5,5],
[23,4,53.3]
])
print (vector.shape)
print (vector.dtype)
按顺序产生0到15个数,并转化为3*5矩阵
np.arange(15).reshape(3,5)
生成3*3随机小数的矩阵
np.random.random((3,3))#从小数后一位产生
初始化一个3行4列的矩阵(零矩阵)
np.zeros((3,4))
```
等差排列向量
#从0开始,终点值为2*π,取100个数,(注:pi:π)
np.linspace(0,2*pi,100)
矩阵的运算
矩阵每个元素求平方
b= np.arange(4)
b**2
矩阵对应位置做乘法
#矩阵位置相乘
a = np.array([2,2,2,2])
b= np.array([1,2,3,4])
a*b
矩阵乘法
A = np.array( [[1,2],
[1,2]])
B = np.array([[1,2],
[2,3]])
print(A)
print("="*20)
print(B)
print("矩阵乘法结果")
print(A.dot(B))
矩阵e的多少次幂,平方根
B= np.arange(3)
print(B)
print(np.exp(B))#e的多少次幂
print(np.sqrt(B))#平方根
矩阵其他操作
矩阵改形、转置、随机数取整
a = np.floor(np.random.random((3,4))*10)#随机数的向下取整,去掉小数部分
print(a)
print("-"*20)
print(a.ravel())#将一个矩阵拉成一维矩阵
print("-"*20)
a.shape = (6,2)#改变矩阵行列个数,保证矩阵个数一致
print(a)
print("-"*20
print(a.T)#求矩阵的转置
矩阵的拼接、取整
a = np.floor(np.random.random((3,4))*10)#随机数的向下取整,去掉小数部分
b = np.floor(np.random.random((3,4))*10)#随机数的向下取整,去掉小数部分
print(a)
print("-"*20)
print(b)
print("-"*20)
print(np.hstack((a,b)))#横向拼接
print("-"*20)
print(np.vstack((a,b)))#纵向拼接
矩阵的切割
print(a)
print("-"*20)
print(np.hsplit(a,2))#0,8,8,4在8与8之间切分开
print("-"*20)
print(np.hsplit(a,(1,2)))#在1与2的位置切分出来
矩阵赋值问题
#矩阵赋值问题,从id之看出,c与a,类似有c++中的引用
c = a
print(id(a))
print(id(c))
#使a,c指向不同的地方,对矩阵变型,互不影响,但公用一套值
c = a.view()#更改指向的位置
print(id(c))
print(a)
print(c)
print("-"*20)
c.shape=(2,6)#
print(a)
print(c)
print("-"*20)
#更改c中的值
c[0,4] = 123
print(a)
print(c)
print("-"*20)
#使a,c指向的位置不一样,值也不互相影响
d= a.copy()
d is a
d[0,0] =99
print(a)
print(d)
print("-"*20)
找矩阵最大值
a = np.array([[0,12,4,58],[15,48,89,8],[45,78,9,8]])
print(a)
print("-"*20)
ind =a.argmax(axis=0)#axis=0按列找行的最大值的下标
print(ind)
print(a.shape)
data_max = a[ind,range(a.shape[1])]#a.shape[1]取列的个数,相当于从行:[2,2,1,0],列:[0,1,2,3]一一对应取下标
print(data_max)
矩阵的扩展
a = np.arange(0,40,10)#从0开始到40结束,每一步加10
print(a)
print("-"*20)
b = np.tile(a,(4,3))#以a为基础,行扩展4倍,列扩展3倍
print(b)
矩阵排序
#对每一行从小到大,排序的索引为排完序的元素以前的位置
ini = np.argsort(a)#排序的索引
print(ini)
print("-"*20)
i = 0;
#按照索引的顺序遍历
print(a.shape[1])
for j in ini:
print(a[i][j])#按索引查值
i +=1
矩阵的切片
a = np.array([[1,2,3],[3,4,5],[4,5,6]])
print(a)
print("="*20)
print(a[:,1]) # 第2列元素
print("="*20)
print(a[1,]) # 第2行元素
print("="*20)
print(a[:,1:]) # 第2列及剩下的所有元素
对切片总结:
-
对于多维数组,[ , ] 注释 ‘,’分隔开的分别为行与列
-
行与列的下标从0开始