Numpy
2024-01-02 22:50:37
numpy基础运算
import numpy as np
array=np.array([[1,2,3],[2,3,4]]) # 用array将列表转化成数组
print(array) #矩阵
[[1 2 3]
[2 3 4]]
array.ndim # 数组维度
2
array.shape #(行数,列数)
(2, 3)
array.size #元素
6
a = np.array([2,23,4], dtype=np.int64) #a的数据类型
a.dtype
dtype('int64')
a=np.array([[1,2,3],[2,3,4]])
a
array([[1, 2, 3],
[2, 3, 4]])
a1 = np.zeros((3,4))
a1
array([[0., 0., 0., 0.],
[0., 0., 0., 0.],
[0., 0., 0., 0.]])
a2 = np.ones((3,4),dtype=np.int32)
a2
array([[1, 1, 1, 1],
[1, 1, 1, 1],
[1, 1, 1, 1]])
a3 = np.empty((3,4),dtype=np.int32)
a3
array([[1, 1, 1, 1],
[1, 1, 1, 1],
[1, 1, 1, 1]])
a4=np.arange(12)
a4
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])
a4=np.arange(12).reshape(3,4) #reshape设定行数和列数
a4
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
a5 = np.linspace(1,10,6) #在[1,10)生成6段
a5
array([ 1. , 2.8, 4.6, 6.4, 8.2, 10. ])
a5 = np.linspace(1,10,6).reshape(2,3) #在[1,10)生成五段
a5
array([[ 1. , 2.8, 4.6],
[ 6.4, 8.2, 10. ]])
a = np.array([10,20,30,40])
b = np.arange(4)
a,b
(array([10, 20, 30, 40]), array([0, 1, 2, 3]))
c = a-b #数组减法
c
array([10, 19, 28, 37])
c=b**2
c
array([0, 1, 4, 9])
c=10*np.sin(a)
c
array([-5.44021111, 9.12945251, -9.88031624, 7.4511316 ])
d1=b<3
d2=b==3
d1,d2
(array([ True, True, True, False]), array([False, False, False, True]))
a=np.array([[1,1],[2,3]])
b=np.arange(4).reshape((2,2))
a,b
(array([[1, 1],
[2, 3]]),
array([[0, 1],
[2, 3]]))
c=a*b #算数乘法
c
array([[0, 1],
[4, 9]])
c2 = np.dot(a,b) # 矩阵乘法
print(c2)
[[ 2 4]
[ 6 11]]
c2 = a.dot(b) #另一种乘法方式
c2
array([[ 2, 4],
[ 6, 11]])
a = np.random.random((2,4)) #随机生产二行四列矩阵 radom模块下,random方法
a
array([[0.43285409, 0.59119159, 0.13123502, 0.26843777],
[0.01975319, 0.89322356, 0.96109008, 0.20043348]])
np.sum(a) #求和
3.498218778049299
np.max(a) #最大值
0.9610900820034279
np.sum(a,axis=1) #axis=1行数中求和
array([1.42371846, 2.07450032])
np.sum(a,axis=0) #axis=0列数中求和
array([0.45260728, 1.48441515, 1.0923251 , 0.46887125])
axis
- axis的取值取决于数据的维度,如果数据是一维数组那么axis只有0,如果数据是二维的,那么axis可以取0和1,如果数据是三维的,那么axis就可以取0、1和2
- axis=0表示沿着列的方向,做逐行的操作
- axis=1表示沿着行的方向,做逐列的操作
- axis=0表示行就是删除行,axis=1表示列就是删除列
A = np.arange(2,14).reshape((3,4))
A
array([[ 2, 3, 4, 5],
[ 6, 7, 8, 9],
[10, 11, 12, 13]])
np.argmin(A) # 最小值索引
0
np.argmax(A) # 最大值索引
11
a1=np.mean(A) #求取均值
a2=A.mean()
a1
a2
7.5
a3 = np.mean(A,axis=0) #删除行,队列求均值
a3
array([6., 7., 8., 9.])
b = np.median(A) #求取中位数
b
7.5
c = np.cumsum(A) #前n项和求法
c
array([ 2, 5, 9, 14, 20, 27, 35, 44, 54, 65, 77, 90])
d = np.diff(A) #累差,第n+1-n个数
d
array([[1, 1, 1],
[1, 1, 1],
[1, 1, 1]])
e = np.nonzero(A) #输出非零行和非零列的索引
e
(array([0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2], dtype=int64),
array([0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3], dtype=int64))
A = np.arange(14,2,-1).reshape((3,4))
A
array([[14, 13, 12, 11],
[10, 9, 8, 7],
[ 6, 5, 4, 3]])
np.sort(A) # 逐行排序
array([[11, 12, 13, 14],
[ 7, 8, 9, 10],
[ 3, 4, 5, 6]])
np.transpose(A) #矩阵转置,行变列,列变行
array([[14, 10, 6],
[13, 9, 5],
[12, 8, 4],
[11, 7, 3]])
A.T #转置另一种写法
array([[14, 10, 6],
[13, 9, 5],
[12, 8, 4],
[11, 7, 3]])
(A.T).dot(A)
array([[332, 302, 272, 242],
[302, 275, 248, 221],
[272, 248, 224, 200],
[242, 221, 200, 179]])
np.clip(A,5,9) #小于5的数为5,大于5的数为9,其余保留
array([[9, 9, 9, 9],
[9, 9, 8, 7],
[6, 5, 5, 5]])
numpy的索引
import numpy as np
A = np.arange(3,15)
A
array([ 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14])
A[3]
6
A = np.arange(3,15).reshape(3,4)
A
array([[ 3, 4, 5, 6],
[ 7, 8, 9, 10],
[11, 12, 13, 14]])
A[2] #索引行数
array([11, 12, 13, 14])
A[1,1] #第一行第一列
8
A[1][1] #第一行第一列,另一种表达方式
8
A[2,:]# 第2行所有数
array([11, 12, 13, 14])
A[:,1] #第一列所有数
array([ 4, 8, 12])
A[1,1:2]
array([8])
A[1,1:3]
array([8, 9])
for row in A: #迭代行
print(row)
[3 4 5 6]
[ 7 8 9 10]
[11 12 13 14]
for col in A.T: #迭代列
print(col)
[ 3 7 11]
[ 4 8 12]
[ 5 9 13]
[ 6 10 14]
for item in A.reshape(1,12):
print(item)
[ 3 4 5 6 7 8 9 10 11 12 13 14]
A.flatten() #将二维数组转换为1维数组
array([ 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14])
A = np.arange(3,15).reshape(3,4)
A
array([[ 3, 4, 5, 6],
[ 7, 8, 9, 10],
[11, 12, 13, 14]])
for item in A.flat: #迭代数组元素
print(item)
3
4
5
6
7
8
9
10
11
12
13
14
numpy array合并
A = np.array([1,1,1])
B = np.array([2,2,2])
A,B
(array([1, 1, 1]), array([2, 2, 2]))
C = np.vstack((A,B))# 上下合并
C
array([[1, 1, 1],
[2, 2, 2]])
C.shape #合并数组形状
(2, 3)
D=np.hstack((A,B)) #左右合并
D
array([1, 1, 1, 2, 2, 2])
D.shape # 一维数组
(6,)
A[np.newaxis,:] #对一维数组在行上增加一个维度
array([[1, 1, 1]])
A[np.newaxis,:].shape
(1, 3)
A[:,np.newaxis] #对一维数组在列上增加一个维度
array([[1],
[1],
[1]])
A[:,np.newaxis].shape
(3, 1)
A = np.array([1,1,1])[:,np.newaxis]
B = np.array([2,2,2])[:,np.newaxis]
A,B
(array([[1],
[1],
[1]]),
array([[2],
[2],
[2]]))
C = np.concatenate((A,B,B,A),axis=0) #确定横纵向的合并,在这删除行
C
array([[1],
[1],
[1],
[2],
[2],
[2],
[2],
[2],
[2],
[1],
[1],
[1]])
C = np.concatenate((A,B,B,A),axis=1) #确定横纵向的合并,在这删除列
C
array([[1, 2, 2, 1],
[1, 2, 2, 1],
[1, 2, 2, 1]])
numpy分割
A = np.arange(12).reshape(3,4)
A
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
np.split(A,2,axis=1) #对列进行分割,分成两块
[array([[0, 1],
[4, 5],
[8, 9]]),
array([[ 2, 3],
[ 6, 7],
[10, 11]])]
np.split(A,3,axis=0) #对行进行分割,分成三块
[array([[0, 1, 2, 3]]), array([[4, 5, 6, 7]]), array([[ 8, 9, 10, 11]])]
# split只进行相等量的分割
# numpy中进行不等量的分割用np.array_split,多了一个array_
np.array_split(A,3,axis=1) #对列进行分割,分成三块
[array([[0, 1],
[4, 5],
[8, 9]]),
array([[ 2],
[ 6],
[10]]),
array([[ 3],
[ 7],
[11]])]
np.vsplit(A,3)#横向分割
[array([[0, 1, 2, 3]]), array([[4, 5, 6, 7]]), array([[ 8, 9, 10, 11]])]
A
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
np.hsplit(A,2)#纵向分割
[array([[0, 1],
[4, 5],
[8, 9]]),
array([[ 2, 3],
[ 6, 7],
[10, 11]])]
numpy copy & deep copy
a = np.arange(4)
a
array([0, 1, 2, 3])
b=a
c=a
d=b
a[0]=11
a
array([11, 1, 2, 3])
b
array([11, 1, 2, 3])
c
array([11, 1, 2, 3])
d[1:3]=[22,33]
d
array([11, 22, 33, 3])
a
array([11, 22, 33, 3])
b = a.copy() #deep copy 把a的值赋给b,但不改变b的属性
b
array([11, 22, 33, 3])
a[3]=44
b
array([11, 22, 33, 3])
文章来源:https://blog.csdn.net/ccBcc_/article/details/135350302
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!