笔记 ,部分代码来自和鲸社区
一、数组聚合
1.数组求和
使用np.sum(array)和sum(array)。对于多维数组,np.sum()默认对所有元素求和,可指定axis=0或axis=1;而sum()默认沿行方向(axis=0)进行求和。
2.最值、平均值、中位数等
具体函数名可查。
import numpy as np
print('np.argmin 找出最小值的索引', np.argmin(n))
print('np.argmax 找出最大值的索引', np.argmax(n))
print('np.percentile 计算各分位数', np.percentile(n, 25))
print('np.any 验证是否存在元素为真', np.any(n))
print('np.all 验证所有元素是否为真', np.all(n))
二、数组广播
1.介绍
广播(Broadcasting) 是一种强大的机制,它允许不同形状的数组之间进行算术运算(如加法、减法、乘法等),而无需显式地复制数据。它的核心思想是:将较小的数组“拉伸”以匹配较大数组的形状,以便进行逐元素操作。
广播遵循三条规则(从末尾维度开始依次比较两个数组的维度,直到最前面):
- 如果两个数组的某一维度长度相同,或其中一个是 1,则它们在该维度上是兼容的。
- 如果两个数组的维度不同,那么在较短的数组前面自动补 1,使其维度一致。
- 输出数组的形状是每个维度上的最大值。
具体例子有标量与数组广播、行向量与列向量的广播、二维数组与一维数组的广播及不兼容(不符合规则)。
import numpy as np
# 行向量与列向量
a = np.arange(3).reshape(3, 1)
b = np.arange(3)
print(a, b)
print(a.shape, b.shape)
print('根据规则1,数组b的维度更小,所以在其左边补1,a.shape(3, 1) b.shape(1, 3)')
print('根据规则2,两个数组维度不匹配,扩展两个数组,a.shape(3, 3) b.shape(3, 3)')
print('''
[[0, 0, 0],
[1, 1, 1],
[2, 2, 2]] + [[0, 1, 2],
[0, 1, 2],
[0, 1, 2]] = \n''', a + b)
2.应用
2.1 归一化处理
数组归一化是将数组的数值范围缩放到特定范围或标准化的过程,实现将不同量级的数据转换到相同的尺度。
最小-最大归一化:将数据缩放到指定范围,通常为[0,1]或[-1,1]。
import numpy as np
def min_max_normalize(data):
data_min = np.min(data)
data_max = np.max(data)
return (data - data_min) / (data_max - data_min)
data = np.array([1, 2, 3, 4, 5])
normalized_data = min_max_normalize(data)
Z-scroe标准化:通过减去平均值后除以标准差来将数据转换为均值为 0,标准差为 1 的分布。
import numpy as np
def z_score_normalize(data):
mean = np.mean(data)
std = np.std(data)
return (data - mean) / std
data = np.array([1, 2, 3, 4, 5])
normalized_data = z_score_normalize(data)
2.2 二维函数
使用 np.linspace 生成坐标点,然后利用广播机制构建网格数据,最后用 Matplotlib 绘图。plt.imshow()将数组转换为图形,plt.imread()将图片转换为数组。
本项目来源于和鲸社区,使用转载需要标注来源
作者: 和鲸社区
来源: 和鲸社区
# 定义一个二维函数 z = f(x, y),可以用广播沿着数值区间计算该函数
# x和y表示0-5区间50个步长的序列
x = np.linspace(0, 5, 50)
y = np.linspace(0, 5, 50)[:, np.newaxis]
z = np.sin(x) ** 10 + np.cos(10 + y * x) * np.cos(x)
print(z)
# 画出二维数组
"""
z:这是要显示的二维数据(通常是一个矩阵或图像)。imshow 将根据这个数据创建一个可视化呈现。
origin:这是一个可选参数,指定了图像数据的坐标原点位置。默认情况下,原点位于图像的左上角('upper'),但在一些情况下,你可能希望将原点移到左下角('lower'),这在处理科学数据时很常见。
extent:这是一个可选参数,用于指定数据的坐标范围。它是一个包含四个值的列表,分别表示 x 轴的起始值、结束值、y 轴的起始值和结束值。在你的代码中,extent=[0, 5, 0, 5] 意味着 x 和 y 轴的坐标范围分别从 0 到 5。
cmap:这是一个可选参数,用于指定用于渲染图像的颜色映射(colormap)。颜色映射定义了数据值如何映射到颜色。在你的代码中,cmap='viridis' 使用了名为 "viridis" 的颜色映射,这是 Matplotlib 内置的一种颜色映射。
plt.colorbar在当前图形(通常是通过 plt.imshow() 绘制的图形)旁边或下方添加一个颜色条。颜色条将显示图像中不同颜色所对应的数据值的范围。通常,颜色条的上端表示数据的最大值,下端表示数据的最小值。通过查看颜色条,用户可以快速了解图像中不同颜色所代表的数据含义,从而提高图像的可解释性。
"""
import matplotlib.pyplot as plt
plt.imshow(z, origin = 'lower', extent = [0, 5, 0, 5], cmap = 'viridis')
plt.colorbar()
总结
学会利用数组广播进行计算,归一化处理数据,二维函数运算。
1702

被折叠的 条评论
为什么被折叠?



