阅读时间约 8 分钟

NumPy

数组基础与常用操作笔记

Posted by LuckyE on June 27, 2025
Python NumPy

NumPy

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])  # 获取第一行的第二列到第四列的元素
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()  # 显示降采样后的图像



Testimonials

What readers say

先看读者反馈,再直接在当前页面继续讨论。公共留言需要 Waline 服务端;配置后访客只填昵称即可发布。

这类长文如果结构清楚,我会一路读到底。这里最好的地方是把概念、公式和代码示例放在同一篇里。

L
Lin 算法读者

数据库和工程文档的风格很实用,截图、SQL 和说明都能直接拿去复盘项目。

M
Mia 工程笔记党

强化学习相关文章密度很高,但排版如果更清楚,回看体验会更好。这个新版方向是对的。

R
Ryo 深夜学习者

我更喜欢能快速扫到标签、修改时间和文章重点的首页,现在这种卡片视图会比纯列表更容易选读。

C
Chen 知识整理控

代码块只要语言标识和层级做好,技术博客的专业感会立刻上来。

A
Ava 前端同行

评论区不用社交账号强绑定会更愿意留言,尤其是这种偏学习记录的网站。

N
Noah 匿名访客

Quick Identity

Pick a preset and leave a note

留言方式:先选择一个预设身份,再在下方输入评论。当前若显示“需要配置 Waline”,说明站点还缺少可写评论后端。

当前未选择预设身份

Live Discussion Waline 配置完成后,真实评论会加载在下方,移动端和主题切换会同步处理。
WALINE
Loading comments…