numpy

属性

1
2
3
4
5
6
7
8
9
import numpy as np

#numpy 属性
array=np.array([[1,2,3]
,[4,5,6]])
print(array)
print("number of dim:",array.ndim) #维度
print("shape:",array.shape) #多少行多少列
print("size",array.size) #多少个元素
  • array.ndim 打印维度
  • array.shape 打印行列数
  • array.size 打印元素个数

运行结果:

1
2
3
4
5
[[1 2 3]
[4 5 6]]
number of dim: 2
shape: (2, 3)
size 6

创建array

np.array

使用这种方法创建的数组类似于列表 但是没有逗号

1
2
a=np.array([2,3,4],dtype=np.int)  #dtype设置显示的类型
print(a) #类似于列表 但是没有逗号

  • dtype 设置显示的类型

运行结果

1
[2 3 4]

创建全是0的array

1
2
a=np.zeros((3,4),dtype=np.int)  #生成一个34列 为0的矩阵
print(a) #生成全为1的矩阵就是用ones

运行结果:

1
2
3
[[0 0 0 0]
[0 0 0 0]
[0 0 0 0]]

指定范围创建array

1
2
a = np.arange(10,20,2)  #从1020  步长为2
print(a)

运行结果:

1
[10 12 14 16 18]

还可以指定行列

1
2
a = np.arange(12).reshape((3,4))  #生成34列从011的矩阵
print(a)

运行结果:
1
2
3
[[ 0  1  2  3]
[ 4 5 6 7]
[ 8 9 10 11]]

基础运算

四则运算

1
2
3
4
5
6
7
8
9
10
a = np.array([10,20,30,40])
b = np.arange(4)

print("数组a:")
print(a)
print("数组b:")
print(b)
c = a-b #加减乘除运算都可以
print("运算结果:")
print(c)

运行结果:

1
2
3
4
5
6
数组a:
[10 20 30 40]
数组b:
[0 1 2 3]
运算结果:
[10 19 28 37]

其他类似

平方

1
2
3
4
5
6
7
8
9
10
a = np.array([10,20,30,40])
b = np.arange(4)

print("数组a:")
print(a)
print("数组b:")
print(b)
print("运算结果:")
c = a**b #a的b次方
print(c)

运行结果:

1
2
3
4
5
6
数组a:
[10 20 30 40]
数组b:
[0 1 2 3]
运算结果:
[ 1 20 900 64000]

三角函数

1
2
3
4
5
6
7
8
9
10
a = np.array([10,20,30,40])
b = np.arange(4)

print("数组a:")
print(a)
print("数组b:")
print(b)
print("运算结果:")
c = 10*np.sin(a) #对于a的每个值sin 再乘10
print(c)

运行结果:

1
2
3
4
5
6
数组a:
[10 20 30 40]
数组b:
[0 1 2 3]
运算结果:
[-5.44021111 9.12945251 -9.88031624 7.4511316 ]

判断

1
2
3
4
5
6
7
a = np.array([10,20,30,40])
b = np.arange(4)

print("数组b:")
print(b)
print("运算结果:")
print(b<3) #小于3为true 否则为false

运行结果

1
2
3
4
数组b:
[0 1 2 3]
运算结果:
[ True True True False]

逐个相乘

1
2
3
4
5
6
7
8
9
10
11
a = np.array([[1,1],
[0,1]])
b = np.arange(4).reshape(2,2)

print("数组a:")
print(a)
print("数组b:")
print(b)
c = a*b #逐个相乘
print("运行结果:")
print(c)

运行结果:

1
2
3
4
5
6
7
8
9
数组a:
[[1 1]
[0 1]]
数组b:
[[0 1]
[2 3]]
运行结果:
[[0 1]
[0 3]]

矩阵乘法

1
2
3
4
5
6
7
8
9
10
11
a = np.array([[1,1],
[0,1]])
b = np.arange(4).reshape(2,2)

print("数组a:")
print(a)
print("数组b:")
print(b)
c_dot = np.dot(a,b) #矩阵乘法
print("运行结果:")
print(c_dot)

运算结果:

1
2
3
4
5
6
7
8
9
数组a:
[[1 1]
[0 1]]
数组b:
[[0 1]
[2 3]]
运行结果:
[[2 4]
[2 3]]

求和_最大(小)值

1
2
3
4
5
6
7
8
9
a = np.random.random((2,4))  #随机生成24列的矩阵
print("数组a:")
print(a)
print("行求和:")
print(np.sum(a,axis=1)) #axis=1就是行求和
print("列求最小值")
print(np.min(a,axis=0)) #axis=0就是每列求最小值
print("求最大值")
print(np.max(a))

运行结果:

1
2
3
4
5
6
7
8
9
数组a:
[[0.43408198 0.78606556 0.54177785 0.1037451 ]
[0.94012845 0.88517271 0.9114281 0.56670466]]
行求和:
[1.86567049 3.30343392]
列求最小值
[0.43408198 0.78606556 0.54177785 0.1037451 ]
求最大值
0.9401284531215222

求索引

1
2
3
4
5
6
7
A = np.arange(2,14).reshape((3,4))

print(A)
print("最小值的索引")
print(np.argmin(A)) #求最小值的索引
print("最大值的索引")
print(np.argmax(A)) #求最大值的索引

运行结果

1
2
3
4
5
6
7
[[ 2  3  4  5]
[ 6 7 8 9]
[10 11 12 13]]
最小值的索引
0
最大值的索引
11

平均数_中位数

1
2
3
4
5
6
7
A = np.arange(2,14).reshape((3,4))

print(A)
print("平均数")
print(np.mean(A)) #求平均值 A.mean()也可以 average()也是一样的
print("中位数")
print(np.median(A)) #求中位数

运行结果:

1
2
3
4
5
6
7
[[ 2  3  4  5]
[ 6 7 8 9]
[10 11 12 13]]
平均数
7.5
中位数
7.5

前n项和

1
2
3
4
5
A = np.arange(2,14).reshape((3,4))

print(A)
print("前n项和")
print(np.cumsum(A)) #逐步累加 前n项和

运行结果:

1
2
3
4
5
[[ 2  3  4  5]
[ 6 7 8 9]
[10 11 12 13]]
前n项和
[ 2 5 9 14 20 27 35 44 54 65 77 90]

逐差

就是前一个数减后一个数

1
2
3
4
5
A = np.arange(2,14).reshape((3,4))

print(A)
print("逐步差")
print(np.diff(A)) #逐步差

运行结果:
1
2
3
4
5
6
7
[[ 2  3  4  5]
[ 6 7 8 9]
[10 11 12 13]]
逐步差
[[1 1 1]
[1 1 1]
[1 1 1]]

非0的数

1
2
3
4
5
A = np.arange(2,14).reshape((3,4))

print(A)
print("非0的数")
print(np.nonzero(A)) #第一个array输出行数 第二个array输出列数 求非0的数

运行结果:

1
2
3
4
5
6
[[ 2  3  4  5]
[ 6 7 8 9]
[10 11 12 13]]
0的数
(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))

第一个array返回的是行的下标 第二个array返回的是列的下标

如果为0 则不返回

逐行排序

1
2
3
4
5
6
A = [[9,8,7],
[6,5,4],
[3,2,1]]
print(A)
print("逐行排序")
print(np.sort(A)) #排序 逐行排序

运行结果:

1
2
3
4
5
[[9, 8, 7], [6, 5, 4], [3, 2, 1]]
逐行排序
[[7 8 9]
[4 5 6]
[1 2 3]]

转置

1
2
3
4
5
A = np.arange(2,14).reshape((3,4))

print(A)
print("矩阵的转置")
print(np.transpose(A)) #矩阵反向 也可以写成A.T 行变列 列变行 矩阵的转置

运行结果:

1
2
3
4
5
6
7
8
[[ 2  3  4  5]
[ 6 7 8 9]
[10 11 12 13]]
矩阵的转置
[[ 2 6 10]
[ 3 7 11]
[ 4 8 12]
[ 5 9 13]]

填充

1
2
3
4
5
A = np.arange(2,14).reshape((3,4))

print(A)
print("所有小于5的数都变成5 所有大于9的数都变成9 中间的数就正常保留")
print(np.clip(A,5,9)) #所有小于5的数都变成5 所有大于9的数都变成9 中间的数就正常保留

运行结果:

1
2
3
4
5
6
7
[[ 2  3  4  5]
[ 6 7 8 9]
[10 11 12 13]]
所有小于5的数都变成5 所有大于9的数都变成9 中间的数就正常保留
[[5 5 5 5]
[6 7 8 9]
[9 9 9 9]]

对列平均运算

1
2
3
4
5
A = np.arange(2,14).reshape((3,4))

print(A)
print("对于列进行平均运算")
print(np.mean(A,axis=0)) #对于列进行平均运算

运行结果:

1
2
3
4
5
[[ 2  3  4  5]
[ 6 7 8 9]
[10 11 12 13]]
对于列进行平均运算
[6. 7. 8. 9.]

索引

1
2
3
4
5
6
7
8
9
10
11
12
A = np.arange(3,15).reshape((3,4))
print(A)
print("输出第2行")
print(A[2])
print("输出第2行第1个元素")
print(A[2,1])
print("输出第1行第1个元素")
print(A[1][1])
print("输出第2行的所有数")
print(A[2,:])
print("输出第1列的所有数")
print(A[:,1])

运行结果

1
2
3
4
5
6
7
8
9
10
11
12
13
[[ 3  4  5  6]
[ 7 8 9 10]
[11 12 13 14]]
输出第2
[11 12 13 14]
输出第2行第1个元素
12
输出第1行第1个元素
8
输出第2行的所有数
[11 12 13 14]
输出第1列的所有数
[ 4 8 12]

迭代

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
A = np.arange(3,15).reshape((3,4))
print(A)

print("转置后输出列")
for column in A.T: #利用转置来输出
print(column) #输出列

print("输出行")
for row in A:
print(row) #输出行

print("迭代每一个元素以列表形式返回")
print(A.flatten())

print("迭代每个元素")
for item in A.flat:
print(item)

运行结果:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
[[ 3  4  5  6]
[ 7 8 9 10]
[11 12 13 14]]
转置后输出列
[ 3 7 11]
[ 4 8 12]
[ 5 9 13]
[ 6 10 14]
输出行
[3 4 5 6]
[ 7 8 9 10]
[11 12 13 14]
迭代每一个元素以列表形式返回
[ 3 4 5 6 7 8 9 10 11 12 13 14]
迭代每个元素
3
4
5
6
7
8
9
10
11
12
13
14

array的合并

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
A = np.array([1,1,1])
B = np.array([2,2,2])

print("垂直合并")
print(np.vstack((A,B))) #数组上下合并
print("水平合并")
print(np.hstack((A,B))) #数组左右合并

print("行方面加了一个维度")
print(A[np.newaxis,:]) #在行方面加了一个维度
print(A[np.newaxis,:].shape)

print("列方面加了一个维度")
print(A[:,np.newaxis]) #在列方面加了一个维度
print(A[:,np.newaxis].shape)

运行结果:

1
2
3
4
5
6
7
8
9
10
11
12
13
垂直合并
[[1 1 1]
[2 2 2]]
水平合并
[1 1 1 2 2 2]
行方面加了一个维度
[[1 1 1]]
(1, 3)
列方面加了一个维度
[[1]
[1]
[1]]
(3, 1)

多array合并

1
2
3
4
5
A = np.array([1,1,1])[:,np.newaxis]
B = np.array([2,2,2])[:,np.newaxis]

C = np.concatenate((A,B,B,A),axis=1) #多个array合并 axis=0垂直合并 axis=1水平合并
print(C)

运行结果:

1
2
3
[[1 2 2 1]
[1 2 2 1]
[1 2 2 1]]

array分割

1
2
3
4
5
6
7
8
9
10
11
12
A = np.arange(12).reshape((3,4))
print(A)

print("垂直分割")
print(np.split(A,2,axis=1)) #axis=1 垂直分割
print("水平分割")
print(np.split(A,3,axis=0)) # axis=0 水平分割

print("水平分割")
print(np.vsplit(A,3)) #水平分割
print("垂直分割")
print(np.hsplit(A,2)) #垂直分割

运行结果:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
[[ 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, 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]])]