欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

数组的创建、运算、求解、维度相互转化、切片操作

程序员文章站 2024-01-05 16:22:04
...

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)