阅读时间约 9 分钟

NumPy

数组基础与常用操作笔记

Posted by LuckyE on June 27, 2025

NumPy

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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
import numpy as np

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

#全零的3x2数组
a = np.zeros((3, 2))
#获取数组的尺寸
print(a.shape)
#默认数据类型
print(a.dtype) #float64
#指定数据类型
a = np.zeros((3, 2), dtype=np.int32)  # 修改为整数类型
#对已有的数组转换数据类型
a = a.astype(np.float64)  # 转换为浮点数类型

#全一的3x2数组
b = np.ones((3, 2))
print(b)

#递增数列
c = np.arange(1, 10, 2)  # 从1到9,步长为2
print(c)

#等分区间
d = np.linspace(0, 1, 5)  # 从0到1,分成5个点
print(d)

#随机数组
e = np.random.rand(3, 2)  # 3x2的随机数组
print(e)

#两个相同尺寸数组可以直接进行四则运算,对同位置的元素进行运算
f = np.array([1, 2, 3, 4])
g = np.array([5, 6, 7, 8])
#加法
print(f + g)
#除法
print(f / g)

#-----------------------点乘,即向量的内积-----------------------
print(np.dot(f, g))
#-----------------------矩阵乘法-----------------------
h = np.array([[1, 2],
              [3, 4]])
i = np.array([[5, 6],
              [7, 8]])
print(h @ i)  # 矩阵乘法
#-----------------------对数组所有数依次求平方根-----------------------
print(np.sqrt(f))  # 对数组f的每个元素求平方根
print(np.sin(f)) # 对数组f的每个元素求正弦
print(np.cos(f)) # 对数组f的每个元素求余弦
print(np.log(f)) # 对数组f的每个元素求自然对数
print(np.power(f, 2)) # 对数组f的每个元素进行指数运算
print(f * 5) # 对数组f的每个元素乘以5
print(f.min(), f.max(), f.mean(), f.median(), f.var(), f.std(), f.sum()) # 求最小值、最大值、均值、中位数、方差、标准差、总和
print(f.argmin(), f.argmax()) # 求最小值和最大值的索引

#-----------------------二维数组的行列求和-----------------------
j = np.array([[1, 2, 3, 4, 5],
              [6, 7, 8, 9, 10]])
# 按列求和(第一个维度为0)
print(j.sum(axis=0))  # 输出每列的和 结果是 [ 7 , 9, 11, 13, 15]
# 按行求和(第一个维度为1)
print(j.sum(axis=1))  # 输出每行的和 结果是 [15, 40]

#获取元素
print(j[0, 1])  # 获取第一行第二列的元素
#筛选
print(j[(j > 5) & (j % 2 == 0)])  # 获取大于5且为偶数的元素
#获取第一行,第二列到第四列的元素
print(j[0, 1:4])  # 获取第一行的第二列到第四列的元素
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
import numpy as np
from PIL import Image

im_1 = Image.open("cat.png")
im_2 = Image.open("Notion.jpg")
# im.show()

im1 = np.array(im_1)
im2 = np.array(im_2)
print(im1.shape)  # 获取图像的形状  (512, 512, 3)
#获取某个像素点
print(im1[100, 100])  # 获取第100行第100列的像素点 RGB值
#提取所有像素点的红色分量
red_channel = im1[:, :, 0]  # 提取红色通道
# Image.fromarray(red_channel).show() # 显示红色通道图像

#混合两张图像
# im_mix = im1 * 0.4 + im2 * 0.6
# im_mix = im_mix.astype(np.uint8)  # 转换为无符号8位整数类型
# Image.fromarray(im_mix).show()  # 显示混合后的图像

#对图片进行降采样
im_downsampled = im1[::2, ::2]  # 每隔一行和一列取一个像素点

#对图片进行翻转
im_flipped = im1[::-1, :,:]  # # 垂直翻转
#对图片进行裁剪
im_cropped = im1[100:400, 100:400, :]  # 裁剪区域为从(100, 100)到(400, 400)
Image.fromarray(im_cropped).show()  # 显示降采样后的图像