数理基础(线性代数)------数组的创建、运算、求解、维度相互转化、切片操作

1. 创建数组

1.1 创建一维数组

import numpy as np
a=np.arange(1,10)
print(a)

1.2 创建数组(一维和二维)

import numpy as np
b=np.array([[1,2,3],[4,5,6],[7,8,9]],dtype=int)
print(b)
c=np.zeros(9).reshape(3,3)
c1=np.zeros((3,3))
print(c)
print(c1)
d=np.ones(9).reshape(3,3)
d1=np.ones((3,3))
print(d)
print(d1)
e=np.linspace(1,10,10,endpoint=False)#创建等差数列
print(e)
f=np.logspace(0,2,20)#创建从10的0次方到10的1次方之间个数为20的等比数列
print(f)
g=np.eye(3)#创建单位矩阵
print(g)
h=np.diag([1,2,3,4])#创建对角矩阵
print(h)
i=np.empty((3,3),dtype=int)
print(i)
i.fill(2)
print(i)
j=np.zeros_like(i)
print(j)
k=np.ones_like(i)
print(k)
l=np.empty_like(i)
print(l)

1.3 创建随机数组

# 创建随机数组
np.set_printoptions(2)#保留两位小数
print(np.random.random(100))#随机生成100个0-1范围的一维数组
print(np.random.random((3, 4)))#随机生成3行4列,0-1范围的二维数组
np.random.randint(10,20,20)#随机生成20个整数,10-20范围的一维数组
print(np.random.randint(10, 20, size=[3, 4]))#随机生成3行4列,10-20范围的二维数组
print(np.random.uniform(10, 20, 20))#随机生成20个小数,10-20范围的一维数组
print(np.random.uniform(10, 20, size=[4, 5]))#随机生成4行5列的20个小数,10-20范围的二维数组

#随机生成服从均匀分布的随机数
np.random.rand(6)#生成6个随机数
np.random.rand((3,5))#随机生成3行5列随机数
print(np.random.randn(10, 5))#生成10行5列的正态分布随机数(二维数组)
print(np.random.permutation(4))

2. 数组的运算

2.1 一维矩阵的运算(+ - * /)

m=np.arange(9)
print(m)
l=np.arange(10,19)
print(l)
print(l+m)#矩阵相加
print(l-m)#矩阵相减
print(l*m)#矩阵相乘
print(l/m)#矩阵相除
print('------------')
print(np.add(l,m))#矩阵相加
print(np.subtract(l,m))#矩阵相减
print(np.multiply(l,m))#矩阵相乘
print(np.divide(l,m))#矩阵相除

2.2 二维数组的计算(+ - * /)

import numpy as np
n=np.arange(9).reshape(3,3)
print(n)
o=np.arange(10,19).reshape(3,3)
print(o)
print(n+o)#矩阵相加
print(n-o)#矩阵相减
print(np.dot(n, o))
print(n.dot(o))#矩阵相乘
#矩阵的乘法(两个矩阵相乘),注意不能用*
print('AB=\n',np.dot(A,B)) #方法一
print('AB=\n',A.dot(B))   #方法二
print('BA=\n',np.dot(B,A))
print('BA=\n',B.dot(A))

2.3 矩阵的拼接

n=np.arange(9).reshape(3,3)
o=np.arange(10,19).reshape(3,3)
print(np.c_[n,o])#横向拼接,或水平拼接
print(np.hstack((n,o)))#横向拼接,或水平拼接
print(np.vstack((n,o)))#纵向拼接,或垂直拼接
print(np.r_[n,o])#纵向拼接,或垂直拼接
print(np.concatenate([n, o], axis=0))#纵向拼接,或垂直拼接
print(np.concatenate([n, o], axis=1))#横向拼接,或水平拼接

2.4 二维数组的运算

import numpy as np
p=np.array([[4,6,0],[-3,-5,0],[-3,-6,1]])
print(p)
print(p.T)#矩阵的转置方法一
print(np.transpose(p))#矩阵的转置方法二
np.linalg.det(p)#矩阵的行列式
np.linalg.inv(p)#矩阵的逆矩阵
np.linalg.matrix_rank(p)#矩阵的秩

2.5 其次和非其次线性方程组的解

import numpy as np
p=np.array([[4,6,0],[-3,-5,0],[-3,-6,1]])
print(np.linalg.solve(p, [0, 0, 0]))# 其次次线性方程组的解
print(np.linalg.solve(p, [0, 1, 1]))# 非其次线性方程组的解

2.6 特征值和特征向量

import numpy as np
p=np.array([[4,6,0],[-3,-5,0],[-3,-6,1]])
r,s=np.linalg.eig(p)
print(r)#求特征值
print(s)#求特征向量

3. 数组维度的相互转化

# 1.一维变二维
a=np.arange(1,13)
print(a.reshape((3, 4)))
#2.一维变为三维
a=np.arange(1,13)
print(a.reshape((3, 2, 2)))
#3.多维变一维
import numpy as np
A=np.array([[1,2,3],
            [4,9,6],
            [9,7,3],
            [0,-3,-4]])
print(np.ravel(A))#二维变一维
print(A.ravel())#二维变一维
print(A.flatten())#二维变一维

4. 数组的切片操作

# 一维数组的切片
import numpy as np
a=np.arange(1,13)
print(a)
print(a[2:8])
# 二维数组的切片
import numpy as np
b=np.array([[1,2,3],[9,8,7],[6,4,5]])
print(b)
print(b[1:, 0:3])
b1=np.arange(12).reshape(3,4)
print(b1)
print('获取第2行第3列的元素',b1[1,2])#获取第2行第3列
print('获取第2、3行第1、2列的元素',b1[1: ,1:3])
print('获取最后1列元素',b1[:,-1])
# 多维数组的切片
import numpy as np
c=np.array([[[1,2,3],
             [4,5,6],
             [7,8,9]],
            [[9,8,7],
             [6,5,4],
             [3,2,1]],
            [[9,0,5],
             [9,4,1],
             [5,3,7]]])
print(c)
print(c[:,1:,1:])#以层、行、列顺序切片

5.数组的基本属性
5.1 一维数组基本属性

#1.一维数组基本属性
b=np.array([3,1,2,7,6.5])
print(b)
print(b.shape)
print(b.dtype)
print(b.ndim)
print(b.size)
print(b.itemsize)#每个元素字节数
print(b.nbytes)#总的元素字节数

5.2 二维数组基本属性

#2.二维数组基本属性
a=np.array([[1,2,3],[4,5,6]])
print(a)
print(a.shape)
print(a.dtype)
print(a.ndim)
print(a.size)
print(a.itemsize)#每个元素字节数
print(a.nbytes)#总的元素字节数
#查看数组的行列数
A=np.array([[2,-1,0],
            [1,3,1],
            [0,1,2]])
print('数组A的行列数',A.shape)
print('数组A的行数',A.shape[0])
print('数组A的列数',A.shape[1])

5.3转化数组元素的类型

1)定义的同时转换元素的类型
c=np.array([1,2,3],dtype=float)
print('c=',c)2)定义好之后转换数据类型
d=np.array([2.1,-4.3,8.9])
print(d)
e=d.astype(int)#保留整数
print(e)

总结:

#创建数组
a=np.arange(1,13)
print(a)
c=a.reshape(3,4)
print(c)
b=np.reshape(a,(2,6))
print(b)
#创建等差数列
np.linspace(0,10,5)
np.linspace(0,10,endpoint=False,retstep=True)
# 创建等差比列
np.logspace(1,10,20)
# 创建全0数组
d=np.zeros((3,4),dtype=int)
print(d)
# 创建全1数组
e=np.ones((4,3),dtype=int)
print(e)
print(d.dot(e))
# 创建单位矩阵
f=np.eye(3,dtype=int)
print(f)
# 创建对角矩阵
g=np.diag([1,2,3,4])
print(g)
# 创建空矩阵
h=np.empty((2,3))
print(h)
h.fill(2)
print(h)
print(np.random.random(size=[2, 3]))
#随机种子
np.random.seed(4)
A=np.random.randint(1,10,size=[2,3])
print(A)
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小飞龙程序员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值