本文介绍: 教程为零基础学习者提供了一个全面的 Numpy 入门指南,涵盖了 Numpy 的常用函数和通用函数使用方法,以及如何有效地保存加载 Numpy 数据。通过本教程,你将能够快速上手 Numpy,为数据分析和科学计算打下坚实的基础。

概述

Numpy (Numerical Python) 是 Python 编程语言一个扩展程序库, 支持大量的维度数组矩阵运算, 并提供了大量的数学函数库. Numpy 利用了多线程数组存储处理大型数据集, 从而提供了一个高效的方式来进行数计算, 特别是对于矩阵预算和线性代数.

Python Numpy 常用函数

通用函数

通用函数 (Ufuncs) 是 numpy 的核心部分. 通用函数提供了快速元素运算. 这些函数都是在 C 语言级别编写的, 因此能提供 Python 所不具备的高性能. 通用函数的另一个又是是能够直接读取数据, 避免了在 Python 循环处理数据的开销.

Numpy 通用函数

np.sqrt 平方根

例子:

# 原始数组
array = np.array([1, 2, 3])

# 平方根
sqrt_array = np.sqrt(array)

# 调试输出
print("原始数组:", array)
print("平方根数组:", sqrt_array)

输出结果:

原始数组: [1 2 3]
平方根数组: [1.         1.41421356 1.73205081]

np.log 对数

np.log对数组中每个元素计算自然对数

l

o

g

e

(

X

)

log_e(X)

loge(X)

例子:

# 原始数组
array = np.array([1, 2, np.e])

# 对数
log_array = np.log(array)

# 调试输出
print("原始数组:", array)
print("对数数组:", log_array)

输出结果:

原始数组: [1.         2.         2.71828183]
对数数组: [0.         0.69314718 1.        ]

np.exp 指数

np.exp对数组中每个元素计算自然指数

e

x

e^x

ex

例子:

# 原始数组
array = np.array([1, 2, 3])

# 平方根
exp_array = np.exp(array)

# 调试输出
print("原始数组:", array)
print("指数数组:", exp_array)

输出结果:

原始数组: [1 2 3]
指数数组: [ 2.71828183  7.3890561  20.08553692]

np.sin 正弦

例子:

# 原始数组
array = np.array([1, 2, 3])

# 正弦 sin
sin_array = np.sin(array)

# 调试输出
print("原始数组:", array)
print("正弦数组:", sin_array)

输出结果:

原始数组: [1 2 3]
正弦数组: [0.84147098 0.90929743 0.1411200

点积和叉积

np.dot 点积

点积 (Dot Product) 是线性代数中的基本运算. 点积是将两个向量的对应坐标相乘然后求和的运算.

对于两个变量 a 和 b, 他们的点积

a

b

=

a

1

b

1

+

a

2

b

2

+

.

.

.

+

a

n

b

n

a cdot b = a_1b_1 + a_2b_2 + … + a_nb_n

ab=a1b1+a2b2++anbn

例子:

# 定义两个向量
a = np.array([1, 2])
b = np.array([3, 4])

# 计算点积
dot_result = np.dot(a, b)  # 1*3 + 2*4 = 11

# 调试输出
print("数组 a:", a)
print("数组 b:", b)
print("点积结果:", dot_result)

输出结果:

数组 a: [1 2]
数组 b: [3 4]
点积结果: 11

叉积

叉积 (Cross Product) 也是线性代数中的基本运算. 叉积是一个向量运算, 其结果是一个新的向量. 叉积的方向遵循右手定则, 大小等于两个向量构成的平行四边形的面积. 对于三味空间中的两个向量 a 和 b, 它们的叉积是

a

×

b

=

(

a

2

b

3

a

3

b

2

,

a

3

b

1

a

1

b

3

,

a

1

b

2

a

2

b

1

)

a times b = (a_2b_3 – a_3b_2, a_3b_1 – a_1b_3, a_1b_2 – a_2b_1)

a×b=(a2b3a3b2,a3b1a1b3,a1b2a2b1)

例子:

# 定义两个三维向量
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])

# 计算叉积
cross_result = np.cross(a, b)  # 2*6 - 3*5, 3*4 - 1*6, 1*5 - 2*4 = [-3, 6, 3]

# 调试输出
print("数组 a:", a)
print("数组 b:", b)
print("叉积结果:", cross_result)

输出结果:

数组 a: [1 2 3]
数组 b: [4 5 6]
叉积结果: [-3  6 -3]

矩阵乘法

矩阵乘法 (Matrix Multiplication) 是将 A, B 两个矩阵相乘得到一个新的矩阵 C. 其元素由 A 的行和 B 的列对应的元素相乘然后求和得到.

np.matmul

例子:

# 定义两个矩阵
matrix1 = np.array([[1, 2], [3, 4]])
matrix2 = np.array([[5, 6], [7, 8]])

# 使用 np.matmul 进行矩阵乘法
matmul_result = np.matmul(matrix1, matrix2)
# 1*5 + 2*7, 1*6 + 2*8 = [19, 22]
# 3*5 + 4*7, 3*6 + 4*8 = [43, 50]

# 调试输出
print("矩阵1:", matrix1, sep="n")
print("矩阵2:", matrix2, sep="n")
print("使用 np.matmul:", matmul_result, sep="n")

输出结果:

矩阵1:
[[1 2]
 [3 4]]
矩阵2:
[[5 6]
 [7 8]]
使用 np.matmul:
[[19 22]
 [43 50]]

@

例子:

# 定义两个矩阵
matrix1 = np.array([[1, 2], [3, 4]])
matrix2 = np.array([[5, 6], [7, 8]])


# 使用 @ 运算符进行矩阵乘法
operator_result = matrix1 @ matrix2
# 1*5 + 2*7, 1*6 + 2*8 = [19, 22]
# 3*5 + 4*7, 3*6 + 4*8 = [43, 50]

# 调试输出
print("矩阵1:", matrix1, sep="n")
print("矩阵2:", matrix2, sep="n")
print("使用 @:", operator_result, sep="n")

输出结果:

矩阵1:
[[1 2]
 [3 4]]
矩阵2:
[[5 6]
 [7 8]]
使用 @:
[[19 22]
 [43 50]]

保存 & 加载

在日常编程中, 我们经常需要将 Numpy 数组保存文件中, 以便日后加载和食用. 下面我们来讲一下如恶化保存和加载 ndarray 对象.

Numpy 保存加载

np.save 保存个数

np.save将单个 ndarray 保存到一个二进制文件中, 文件扩展名通常为 “.npy”.

例子:

# 创建数组
array = np.array([1, 2, 3, 4])

# 保存数组
np.save("array.npy", array)

np.savez 保存多个数

np.savez将多个 ndarray 保存到一个二进制文件中, 文件扩展名通常为 “.npy”.

例子:

# 创建数组
array1 = np.array([1, 2, 3, 4])
array2 = np.array([5, 6, 7, 8])

# 保存多个数组
np.savez("arrays.npz", array1=array1, array2=array2)

np.savez_compressed 保存

np.savez_compressednp.savez不同, 会对数组进行压缩.

例子:

# 创建数组
array1 = np.zeros(30000)
array2 = np.ones(30000)

# 保存多个数组
np.savez("arrays.npz", array1=array1, array2=array2)
np.savez_compressed("arrays_compressed.npz", array1=array1, array2=array2)

# 查看文件大小
arrays_size = os.path.getsize("arrays.npz")
arrays_compressed_size = os.path.getsize("arrays_compressed.npz")
print("无压缩大小: {} kb".format(arrays_size // 1024))
print("压缩大小: {} kb".format(arrays_compressed_size // 1024))

输出结果:

无压缩大小: 469 kb
压缩大小: 1 kb

np.load 加载

np.load可以帮助我们加载保存的文件, 加载 “.npy” 和 “.npz” 文件.

加载单个数组:

# 加载单个数组
array = np.load("array.npy")
print(array)

输出结果:

[1 2 3 4]

加载多个数组:

# 加载多个数组
loaded_array = np.load("arrays.npz")
array1 = loaded_array["array1"]
array2 = loaded_array["array2"]
print(array1)
print(array2)

输出结果:

[1 2 3 4]
[5 6 7 8]

npy vs npz

npy 文件:

npz 文件:

  • 多个数组: .npz 格式用于保存多个 NumPy 数组. 通过将数组以关键字参数的形式传递给np.saveznp.savez_compressed函数来实现
  • 压缩: .npz 文件可以选择压缩与否. 使用np.savez时, 数据不会被压缩, 而使用np.savez_compressed函数时, 所有数据都会被压缩. 通过压缩可以显著减少文件的大小, 特别是对于包含大量重复数据的数组

原文地址:https://blog.csdn.net/weixin_46274168/article/details/134195979

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。

如若转载,请注明出处:http://www.7code.cn/show_7747.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注