什么是NumPy
NumPy(Numerical Python)是Python中用于科学计算的一个核心库。
它提供了一个高性能的多维数组对象(numpy.array),以及对这些数组进行操作的工具。
NumPy的主要功能包括:
-
多维数组对象(Arrays)
NumPy提供了numpy.array对象,是一个灵活的N维数组,可以容纳任意类型的数据。
-
广播(Broadcasting)
NumPy支持不同形状的数组之间的数学运算,使得在不增加内存消耗的情况下进行操作更加容易。
-
数学函数
NumPy包含大量的数学函数,用于执行各种数学运算,如线性代数、傅里叶变换、统计等。
-
输入/输出
NumPy包含了读写不同数据格式的工具,如文本文件、二进制文件,以及基于内存映射文件的数组操作。
Numpy库的优缺点
1 、优点:
-
性能优越
NumPy中的操作是基于C语言实现的,因此在处理大规模数据时非常高效。
-
广泛应用
在科学计算、数据分析和机器学习等领域,NumPy都是一种被广泛应用的工具。
-
丰富的功能
丰富的函数和工具,涵盖了从简单的数学运算到复杂的线性代数和统计运算。
-
开源
NumPy是开源的,拥有庞大的社区支持,有大量的文档和教程可供学习和参考。
2、 缺点:
-
学习曲线
初学者来说,NumPy的学习曲线可能相对陡峭,对于没有数学和科学计算背景的人。
-
内存消耗
在处理大规模数据时,NumPy可能占用较多的内存。
NumPy安装
在安装Python的环境下使用pip进行安装。
# 升级pip最新版本
python -m pip install --upgrade pip
pip install numpy
你可以使用Conda来安装NumPy。确保你已经安装了Conda,然后在命令行中运行以下命令:
# 在环境外部安装适合所有环境
conda install numpy
# 在某个虚拟环境中安装
conda activate you_env
# 升级conda
conda update conda
# 安装 numpy
conda install numpy
NumPy的基础用法
-
数组的创建
import numpy as np
# 创建一维数组
arr1 = np.array([1, 2, 3])
print(arr1)
# 创建二维数组
arr2 = np.array([[1, 2, 3], [4, 5, 6]])
print(arr2)
# 创建全零数组
zeros_arr = np.zeros((3, 3))
print(zeros_arr)
# 创建全一数组
ones_arr = np.ones((2, 2))
print(ones_arr)
# 创建等差数组
range_arr = np.arange(0, 10, 2)
print(range_arr)
# 创建均匀分布数组
uniform_arr = np.linspace(0, 1, 5)
print(uniform_arr)
# 创建随机数组
rand_arr = np.random.rand(2, 2)
print(rand_arr)
-
数组操作
# 数组形状二行三列
shape = arr2.shape
# 数组维度
dimension = arr2.ndim
# 数组元素类型
dtype = arr2.dtype
print(shape,dimension,dtype)
# 数组转置
transposed_arr = arr2.T
# 行列交换
print(arr2)
print(transposed_arr)
# 数组切片,行不变,列取出col[1] col[2]
sliced_arr = arr2[:, 1:3]
print(sliced_arr)
# 数组运算 2行4列数组,数组中每个元素单独运算
arr3 = np.array([[3,4,6,5],[9,8,5,3]])
# 注:不同维数是不能运算的
sum_arr = arr3 + arr3
mul_arr = arr3 * arr3
print(sum_arr,mul_arr)
-
广播
# 和其它类型操作
print(arr3 + 1)
print(arr3 - 12)
-
数据处理
# 读取数据
data = np.loadtxt('data.txt', delimiter=' ')
# 数据切片
features = data[:, :-1]
print(features)
#求均值 axis不设置所有m*n均值,0列均值 1行均值
mean = np.mean(features, axis=0)
print(mean)
# 计算标准差,就是上面均值在做开方操作
std = np.std(features, axis=0)
print(std)
normalized_features = (features - mean) / std
print(normalized_features)
-
数学运算
# 矩阵乘法
matrix_a = np.random.rand(3, 4)
matrix_b = np.random.rand(4, 2)
result_matrix = np.dot(matrix_a, matrix_b)
print(result_matrix)
-
神经网络中的数组操作
import numpy as np
# 假设有一个简单的神经网络层
input_size = 3
output_size = 2
# 随机生成输入数据和权重
input_data = np.random.rand(4, input_size)
weights = np.random.rand(input_size, output_size)
# 矩阵乘法
output_data = np.dot(input_data, weights)
# 激活函数
def sigmoid(x):
return 1 / (1 + np.exp(-x))
activated_output = sigmoid(output_data)
print(activated_output)
-
图像处理
import numpy as np
from PIL import Image
# 读取图像
image_path = "mm.jpg"
image = Image.open(image_path)
print(image.size,image.format,image.mode)
# display(image)
# 转换为NumPy数组
image_array = np.array(image)
# 图像缩放
size = (image.size[0] // 2,image.size[1] // 2)
resize = Image.fromarray(image_array,'RGB').resize(size)
# 显示原图和缩放后的图
display(image,resize)
resized_image = np.array(resize)
# 提取颜色通道
red_channel = resized_image[:, :, 0]
green_channel = resized_image[:, :, 1]
blue_channel = resized_image[:, :, 2]
print(red_channel,green_channel,blue_channel)
sd生成600,720的美女图,进行截取和颜色提取
-
损失函数计算
在深度学习中,损失函数用于衡量模型预测与实际标签之间的差异。NumPy可以用于计算损失函数。
# 假设有模型预测和实际标签
predictions = np.array([0.2, 0.8, 0.5])
true_labels = np.array([0, 1, 1])
# 交叉熵损失函数 CE(p,q)=−∑i pi log(qi)
def cross_entropy_loss(predictions, true_labels):
epsilon = 1e-15
predictions = np.clip(predictions, epsilon, 1 - epsilon)
loss = - np.sum(true_labels * np.log(predictions + 1e-9))
return loss
loss = cross_entropy_loss(predictions, true_labels)
-
性能优化
然NumPy在许多情况下具有足够的性能,但在深度学习中,通常需要处理大规模数据和复杂的模型。为了进一步提高性能,可以考虑使用GPU加速库(例如CUDA)来加速NumPy操作。
import cupy as cp # 使用CuPy替代NumPy
# 在GPU上执行操作
arr_cpu = np.random.rand(1000, 1000)
arr_gpu = cp.asarray(arr_cpu)
# 使用CuPy进行加速计算
result_gpu = cp.dot(arr_gpu, arr_gpu)
result_cpu = cp.asnumpy(result_gpu)
原文始发于微信公众号(程序员老朱):数据科学初学者必知的Python第三方库NumPy
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论