numpy笔记
Published in:2023-07-16 | category: Ai

numpy数组跟python原生的数组不同
优势:因为底层是使用C语言直接实现,所以效率更快(但编写是python)
学习文章:https://blog.csdn.net/a373595475/article/details/79580734

基本概念:

NumPy数组的维度:指的是数组的轴数或数组的秩(rank)。

1
2
3
4
5
6
7
8
9
10
11
12
[1,2,3] 一维

[[1,2,3],
[1,2,3],
[1,2,3]] 二维

[
[[1,2,3],
[1,2,3]],
[[1,2,3],
[1,2,3]]
] 三维
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
import numpy as np

a = np.array([[[1,2,3],
[4,5,6]],
[[7, 8, 9],
[10, 11, 12]]]
)
print(a.shape)
print("一维")
print(a[0])
print(a[1])
print("二维")
print(a[:,0])
print(a[:,1])
print("三维")
print(a[:,:,0])
print(a[:,:,1])
print(a[:,:,2])

D:\development\python\python.exe D:/AI/pydemo/numpy_demo.py
(2, 2, 3)
一维
[[1 2 3]
[4 5 6]]
[[ 7 8 9]
[10 11 12]]
二维
[[1 2 3]
[7 8 9]]
[[ 4 5 6]
[10 11 12]]
三维
[[ 1 4]
[ 7 10]]
[[ 2 5]
[ 8 11]]
[[ 3 6]
[ 9 12]]

进程已结束,退出代码0

创建数组

通过列表创建数组

1
2
3
np.array([1,2,3])

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

[[1 2 3]
[1 2 3]
[1 2 3]]
1
2
3
4
5
6
7
8
9
10
np.array([[[1,2,3],
[1,2,3]],
[[1,2,3],
[1,2,3]]])

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

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

创建全为0的三维数组

1
np.zeros((3,4))

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

创建全为1的三维数组

1
np.ones((2,3,4))

[[[1. 1. 1. 1.]
[1. 1. 1. 1.]
[1. 1. 1. 1.]]

[[1. 1. 1. 1.]
[1. 1. 1. 1.]
[1. 1. 1. 1.]]]

创建任意大小的数组并填充指定数字

1
np.full((2, 5), 2)

[[2 2 2 2 2]
[2 2 2 2 2]]

arange创建一维等差数组

1
np.arange(4)

[0 1 2 3 4]

创建多维等差数组

1
np.arange(6).reshape(2,3)

[[0 1 2]
[3 4 5]]

使用arange创建了一维等差数组,然后先reshape将数组重塑为形状(2,3)

创建单位矩阵

1
np.eye(3)

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

创建二维随机数组

1
np.random.rand(2,3)

[[0.09281844 0.90069456 0.02561579]
[0.75375864 0.12419854 0.76366864]]

创建二维随机整数数组(数值小于5)

1
np.random.randint(5,size=(2,3))

[[0 1 1]
[4 3 0]]

数组运算

num 数组内 加

1
2
3
4
a = np.array([[1, 2, 3, 4, 5], [1, 2, 3, 4, 5]])
print(np.sum(a)) # 对数组内所有元素求和
print(np.sum(a, axis=0)) # axis=0 表示对每一列求和
print(np.sum(a, axis=1)) # axis=0 表示对每一行求和

30
[ 2 4 6 8 10]
[15 15]

mean 求平均值

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

3.0

tile 复制

1
2
a = np.array([1, 2, 3, 4, 5])
print(np.tile(a,(1,2))) #表示复制为一行两列(右边再复制一列)

[[1 2 3 4 5 1 2 3 4 5]]

argsort 返回大小排序后的下标

1
2
3
4
5
6
7
numpy.argsort(a, axis=-1, kind='quicksort', order=None)

a:要排序的数组。
axis:指定沿着哪个轴进行排序,默认为最后一个轴。
kind:指定排序算法,可选值为'quicksort''mergesort''heapsort'。默认为'quicksort'
order:当a为结构化数据类型时,通过该参数指定排序依据的字段。

1
2
3
a = np.array([[3, 2, 1, 4, 5], [8, 2, 1, 4, 5]])
print(a.argsort()) # 将元素按照行从小到大排序,返回对应位置元素的下标
print(a.argsort(axis=0))

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

tip:这个下标是排列前的下标,以第二行为例子,可以对应着去看2->1,1->2,3->4,4->5,0->8(下标->数字)

一维数组加减乘除

tip:数组的加减乘除就是相对应位置上的元素加减乘除

1
2
3
4
5
6
7
8
9
a = np.array([[1, 2, 3, 4, 5], [1, 2, 3, 4, 5]])
b = np.full((2, 5), 2)
b[1,4]=4 # 将第二行的第五个元素换为4
print(a)
print(b)
print(a + b)
print(a - b)
print(a * b)
print(a / b)

[[1 2 3 4 5]
[1 2 3 4 5]]
[[2 2 2 2 2]
[2 2 2 2 4]]
[[3 4 5 6 7]
[3 4 5 6 9]]
[[-1 0 1 2 3]
[-1 0 1 2 1]]
[[ 2 4 6 8 10]
[ 2 4 6 8 20]]
[[0.5 1. 1.5 2. 2.5 ]
[0.5 1. 1.5 2. 1.25]]

矩阵运算

矩阵乘法

np.dot(A, B) 是用于计算两个数组的矩阵乘法的函数。

1
2
3
A = np.array([[1, 2], [3, 4]])
B = np.array([[5, 6], [7, 8]])
print(np.dot(A, B))

[[19 22]
[43 50]]

如果使用 np.mat 将二维数组准确定义为矩阵,就可以直接使用 * 完成矩阵乘法计算:

1
2
3
A = np.mat([[1, 2], [3, 4]])
B = np.mat([[5, 6], [7, 8]])
print(A*B)

[[19 22]
[43 50]]

转置矩阵

1
2
3
A = np.mat([[1, 2], [3, 4]])
print(A)
print(A.T)

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

矩阵求逆

1
2
A = np.mat([[1, 2], [3, 4]])
print(np.linalg.inv(A))

[[-2. 1. ]
[ 1.5 -0.5]]

广播

介绍: 广播(broadcasting)是一种强大且灵活的机制,NumPy会自动调整数组的形状,以使其符合运算的要求。

1
2
3
4
5
6
7
8
a = np.array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
b = np.array([1, 2, 3])
print(a+b) # 广播会自动调整数组的形状
b = np.tile(b, (3, 1)) # 复制三行
print(b)
print(a+b)

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

索引的使用

1
2
3
4
5
6
7
a = np.array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
print(a[0, 0]) # 取出某个确定的值
print(a[0:2, 0:2]) # 取出某个范围
print(a[np.arange(3), 1] + 10) # 给数组行索引为0,1,2的第一个元素都加上10
print(a[a > 6]) # 取出大于6的元素

1
[[1 2]
[4 5]]
[12 15 18]
[7 8 9]

类型与类型转换

1
2
3
a = np.array([1.2, 2.1],dtype=np.float64)
print(a.dtype)
print(a.astype(np.int64)) # 将类型转换为int64

float64
[1 2]

Next:
Pandas笔记