美文网首页
Numpy 学习笔记

Numpy 学习笔记

作者: 都灵的夏天_ | 来源:发表于2020-11-22 22:26 被阅读0次

numpy 笔记

import numpy as np

入门基础

转化为矩阵

array = np.array([[1,2,3],[4,5,6]])
print(array)
[[1 2 3]
 [4 5 6]]

输出矩阵维度

print(array.ndim)
2

输出形状

print(array.shape)
(2, 3)

共有多少元素

print(array.size)
6

创建numpy数组

a = np.array([[1,2,3,4],[4,5,6,7]],dtype=np.int) #dtype 定义数组格式 int/float/int32/int64/float32/float64
print(a.dtype)
int32

创建0矩阵

a = np.zeros((3,4))
print(a)

[[0. 0. 0. 0.]
 [0. 0. 0. 0.]
 [0. 0. 0. 0.]]

创建全1矩阵

a = np.ones((3,4),dtype=np.int16)
print(a)

[[1 1 1 1]
 [1 1 1 1]
 [1 1 1 1]]

创建空矩阵 (实际是无限接近0)

a = np.empty((3,4))
print(a)

[[0. 0. 0. 0.]
 [0. 0. 0. 0.]
 [0. 0. 0. 0.]]

生成有序的数列

a = np.arange(10,20,2) 
print(a)
[10 12 14 16 18]
a = np.arange(12).reshape(3,4) #指定形状
print(a)
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]

生成线段

a = np.linspace(1,100,5)
print(a)
[  1.    25.75  50.5   75.25 100.  ]
a = np.linspace(1,100,10).reshape(2,5)
print(a)
[[  1.  12.  23.  34.  45.]
 [ 56.  67.  78.  89. 100.]]

基础运算

a = np.array([10,20,30,40])
b = np.arange(4)
print(a,b)
print('a+b:',a+b) #a+/-/*//b 

[10 20 30 40] [0 1 2 3]
a+b: [10 21 32 43]
print('a的平方:',a**2)  
a的平方: [ 100  400  900 1600]
c= 10*np.sin(a) #cos tan  相同
print(c)
[-5.44021111  9.12945251 -9.88031624  7.4511316 ]

矩阵判断

print(b)
print(b<3) #> < ==
[0 1 2 3]
[ True  True  True False]

矩阵乘法

a = np.array([[1,2],[3,4]])
b = np.arange(4).reshape((2,2))
c = a*b  #逐个元素相乘
c_dot = np.dot(a,b)  #矩阵乘法
c_dot_2 = a.dot(b) #与上相同 不同表达方式
print(c)
print(c_dot)
[[ 0  2]
 [ 6 12]]
[[ 4  7]
 [ 8 15]]

生成随机数 常用函数

a = np.random.random((2,4)) #生成两行4列0-1的随机数
print(a)
print(np.sum(a)) #求和
print(np.sum(a,axis=1)) # axis=1每一行进行求和,axis=0每一列进行求和
print(np.min(a))  #最小值
print(np.max(a))  #最大值
[[0.50073252 0.99121935 0.89618503 0.94605403]
 [0.75885286 0.19195458 0.12275648 0.74767929]]
5.155434142539565
[3.33419093 1.82124321]
0.12275648261726968
0.9912193520810159

常用函数

A = np.arange(14,2,-1).reshape((3,4))
print(np.argmin(A))       #计算最小值的索引
print(np.argmax(A))     #最大值索引
print(np.mean(A))       #均值
print(np.average(A))   
print(np.median(A))     #中位数
print(np.cumsum(A))    #累加
print(np.diff(A))             #累差 
print(np.nonzero(A))     #找到非0的数   返回的两个数组分别是 行列索引
print(np.sort(A))             #排序   逐行排序
print(np.transpose(A))    #转置
print(A.T)                        #转置
print((A.T).dot(A))
11
0
8.5
8.5
8.5
[ 14  27  39  50  60  69  77  84  90  95  99 102]
[[-1 -1 -1]
 [-1 -1 -1]
 [-1 -1 -1]]
(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))
[[11 12 13 14]
 [ 7  8  9 10]
 [ 3  4  5  6]]
[[14 10  6]
 [13  9  5]
 [12  8  4]
 [11  7  3]]
[[14 10  6]
 [13  9  5]
 [12  8  4]
 [11  7  3]]
[[332 302 272 242]
 [302 275 248 221]
 [272 248 224 200]
 [242 221 200 179]]

截取

a = np.arange(2,14).reshape(3,4)
print(a)
print(np.clip(a,5,10))   #大于5小于10的保留 其余取上下界
[[ 2  3  4  5]
 [ 6  7  8  9]
 [10 11 12 13]]
[[ 5  5  5  5]
 [ 6  7  8  9]
 [10 10 10 10]]

索引

a = np.arange(2,14).reshape(3,4)
print(a)
print(a[1]) #输出第一行
print(a[1][1])#输出第1行第1列
print(a[1,1])
print(a[1,:]) #输出第一行全部  : 左开右闭  
print(a)
print(a.T)
for column in a.T:    # 输出每行
    print(column)

#遍历每一个元素
print(a.flatten())  #矩阵转换为一维数组
for item in a.flat:
    print(item)

[[ 2  3  4  5]
 [ 6  7  8  9]
 [10 11 12 13]]
[6 7 8 9]
7
7
[6 7 8 9]
[[ 2  3  4  5]
 [ 6  7  8  9]
 [10 11 12 13]]
[[ 2  6 10]
 [ 3  7 11]
 [ 4  8 12]
 [ 5  9 13]]
[ 2  6 10]
[ 3  7 11]
[ 4  8 12]
[ 5  9 13]
[ 2  3  4  5  6  7  8  9 10 11 12 13]
2
3
4
5
6
7
8
9
10
11
12
13

array合并

a = np.array([1,1,1])
b = np.array([2,2,2])
print(np.vstack((a,b)))   #vertical stack  垂直合并
print(np.hstack((a,b)))    #horizontal stack  左右合并 
C=np.vstack((a,b))
D=np.hstack((a,b))
print(A.shape)
print(D.shape) #(6,)

print(D[:,np.newaxis].shape) #(6,1)
print(D[:,np.newaxis])        

print(np.concatenate((a,a,b,b),axis=0)) #按列合并 左右合并


[[1 1 1]
 [2 2 2]]
[1 1 1 2 2 2]
(3, 4)
(6,)
(6, 1)
[[1]
 [1]
 [1]
 [2]
 [2]
 [2]]
[1 1 1 1 1 1 2 2 2 2 2 2]

array分割

a = np.arange(12).reshape((3,4))
print(a)
print('-----------------------------------')
print(np.split(a,2,axis=1))  #按列分割 分成两块
print('-----------------------------------')
print(np.split(a,3,axis=0))  #按行分割 成三块
print('-----------------------------------')
#不等量分割
print(np.array_split(a,3,axis=1))
print('-----------------------------------')

print(np.vsplit(a,3))
print('-----------------------------------')
print(np.hsplit(a,2))

[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]
-----------------------------------
[array([[0, 1],
       [4, 5],
       [8, 9]]), array([[ 2,  3],
       [ 6,  7],
       [10, 11]])]
-----------------------------------
[array([[0, 1, 2, 3]]), array([[4, 5, 6, 7]]), array([[ 8,  9, 10, 11]])]
-----------------------------------
[array([[0, 1],
       [4, 5],
       [8, 9]]), array([[ 2],
       [ 6],
       [10]]), array([[ 3],
       [ 7],
       [11]])]
-----------------------------------
[array([[0, 1, 2, 3]]), array([[4, 5, 6, 7]]), array([[ 8,  9, 10, 11]])]
-----------------------------------
[array([[0, 1],
       [4, 5],
       [8, 9]]), array([[ 2,  3],
       [ 6,  7],
       [10, 11]])]

深浅拷贝

 a = np.arange(4)
print(a)
b=a
c=b
print(b)
print(c)
a[2]=99      #copy 改变原来的数组  全部改变
print(a)
print(b)
print(c)
print('-----------------------------------')
a = np.arange(4)
print(a)
b = a.copy()            #deep copy  改变原数组  赋值的不改变  b=a[:] 效果一样
print(b)
a[2]=99
print(a)
print(b)
[0 1 2 3]
[0 1 2 3]
[0 1 2 3]
[ 0  1 99  3]
[ 0  1 99  3]
[ 0  1 99  3]
-----------------------------------
[0 1 2 3]
[0 1 2 3]
[ 0  1 99  3]
[0 1 2 3]

相关文章

网友评论

      本文标题:Numpy 学习笔记

      本文链接:https://www.haomeiwen.com/subject/kkvpiktx.html