纯干货总结-动手学NumPy

Ora ·
更新时间:2024-11-13
· 646 次阅读

欢迎大家查看此项目:Dive-into-NumPy
NumPy中文网

logo 项目介绍

本项目名为:动手学NumPy。包含以下内容

NumPy简介 NumPy数组与pthon原生数组的区别 NumPy快速入门 NumPy进阶 numpy-100 参考文献 NumPy简介

NumPy是Python中科学计算的基础包。它是一个Python库,提供多维数组对象,各种派生对象(如掩码数组和矩阵),以及用于数组快速操作的各种API,有包括数学、逻辑、形状操作、排序、选择、输入输出、离散傅立叶变换、基本线性代数,基本统计运算和随机模拟等等。除其他外,它包括:

功能强大的N维数组对象。 精密广播功能函数。 集成 C/C+和Fortran 代码的工具。 强大的线性代数、傅立叶变换和随机数功能。 NumPy数组与pthon原生数组的区别 NumPy 数组在创建时具有固定的大小,与Python的原生数组对象(可以动态增长)不同。更改ndarray的大小将创建一个新数组并删除原来的数组。 NumPy 数组中的元素都需要具有相同的数据类型,因此在内存中的大小相同。 例外情况:Python的原生数组里包含了NumPy的对象的时候,这种情况下就允许不同大小元素的数组。 NumPy 数组有助于对大量数据进行高级数学和其他类型的操作。通常,这些操作的执行效率更高,比使用Python原生数组的代码更少。 越来越多的基于Python的科学和数学软件包使用NumPy数组; 虽然这些工具通常都支持Python的原生数组作为参数,但它们在处理之前会还是会将输入的数组转换为NumPy的数组,而且也通常输出为NumPy数组。换句话说,为了高效地使用当今科学/数学基于Python的工具(大部分的科学计算工具),你只知道如何使用Python的原生数组类型是不够的 - 还需要知道如何使用 NumPy 数组。 NumPy快速入门

NumPy里有两个重要的对象:ndarray(N-dimensional array object)解决了多维数组问题,而 ufunc(universal function object)则是解决对数组进行处理的函数。

ndarry ufunc 连续数组的创建 算术运算 统计函数 排序函数 ndarry

ndarray 实际上是多维数组的含义。在 NumPy 数组中,维数称为秩(rank),一维数组的秩为 1,二维数组的秩为 2,以此类推。在 NumPy 中,每一个线性的数组称为一个轴(axes),其实秩就是描述轴的数量。

构建ndarry:

import numpy as np a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) a[1,1]=10 print("shape: ", a.shape) print("dtype: ", a.dtype) print("a: \n", a) print("a[:, 1]: \n", a[:,1])

输出结果:

shape: (3, 3) dtype: int64 a: [[ 1 2 3] [ 4 10 6] [ 7 8 9]] a[:, 1]: [ 2 10 8]

此时数组a就有两个轴,01

axis

axis=0,该轴上的元素分为三组:

axis

axis=1,该轴上的元素也同样分为三组:

axis ufunc

ufunc 是 universal function 的缩写,是不是听起来就感觉功能非常强大?确如其名,它能对数组中每个元素进行函数操作。NumPy 中很多 ufunc 函数计算速度非常快,因为都是采用 C 语言实现的。

连续数组的创建 import numpy as np x1 = np.arange(1,11,2) #参数为:起始值,终止值,步长(不包括终止值) x2 = np.linspace(1,9,5) #参数为:起始值,终止值,元素个数(包括终止值) 算术运算 import numpy as np x1 = np.arange(1,11,2) x2 = np.linspace(2,10,5) print("x1: \n", x1) print("x2: \n", x2) print("add: \n", np.add(x1, x2)) #加 print("subtract: \n", np.subtract(x1, x2))#减 print("multiply: \n", np.multiply(x1, x2))#乘 print("divide: \n", np.divide(x1, x2))#除 print("power: \n", np.power(x1, x2))#求幂 print("remainder: \n", np.remainder(x1, x2))#取余

输出结果:

x1: [1 3 5 7 9] x2: [ 2. 4. 6. 8. 10.] add: [ 3. 7. 11. 15. 19.] subtract: [-1. -1. -1. -1. -1.] multiply: [ 2. 12. 30. 56. 90.] divide: [0.5 0.75 0.83333333 0.875 0.9 ] power: [1.0000000e+00 8.1000000e+01 1.5625000e+04 5.7648010e+06 3.4867844e+09] remainder: [1. 3. 5. 7. 9.] 统计函数 #统计矩阵中的最大值与最小值 import numpy as np a = np.array([[8,6,1], [2,4,7], [3,9,5]]) print("a: \n", a) print("min: \n", np.amin(a))#整个矩阵中最小值 print("axis=0 min: \n", np.amin(a,axis=0))#axis=0方向的最小值 print("axis=1 min: \n", np.amin(a,axis=1))#axis=1方向的最小值 #max与此相同 print("median: \n", np.median(a))#求中位数 print("mean: \n", np.mean(a))#求均值 print("average: \n", np.average(a))#求平均值 print("std: \n", np.std(a))#求标准差 print("var: \n", np.var(a))#求方差

输出结果:

a: [[8 6 1] [2 4 7] [3 9 5]] min: 1 axis=0 min: [2 4 1] axis=1 min: [1 2 3] median: 5.0 mean: 5.0 average: 5.0 std: 2.581988897471611 var: 6.666666666666667 排序函数 import numpy as np a = np.array([[4,3,2], [2,4,1]]) print("a: \n", a) print("sort: \n", np.sort(a)) print("axis=None sort:\n", np.sort(a, axis=None)) print("axis=0 sort: \n", np.sort(a, axis=0)) print("axis=1 sort: \n", np.sort(a, axis=1))

输出结果:

a: [[4 3 2] [2 4 1]] sort: [[2 3 4] [1 2 4]] axis=None sort: [1 2 2 3 4 4] axis=0 sort: [[2 3 1] [4 4 2]] axis=1 sort: [[2 3 4] [1 2 4]] NumPy进阶

NumPy进阶操作请查看:链接

numpy-100

numpy-100是将numpy的常用操作整理为练习题下载链接,学习完以上内容可以使用此练习题检测自己的学习效果,numpy-100原作者。黄海广博士也对此进行了整理numpy-100。

使用方法 文件夹有三个不同的ipynb文件:

100_Numpy_exercises_no_solution.ipynb

没有答案代码的文件,这个是你做的练习

100_Numpy_exercises_with_hint.ipynb

没有答案代码的文件,但有提示,这个你也可以用来练习

100_Numpy_exercises.ipynb

有答案代码和注释的文件

你可以在100_Numpy_exercises_no_solution.ipynb 里输入代码,看看运行结果是否和100_Numpy_exercises.ipynb 里面的内容一致。

参考文献

[1] Rakshith Vasudev: https://medium.com/hackernoon/introduction-to-numpy-1-an-absolute-beginners-guide-to-machine-learning-and-data-science-5d87f13f0d51

[2] Piotr Skalski: https://towardsdatascience.com/lets-code-a-neural-network-in-plain-numpy-ae7e74410795

[3] https://flat2010.github.io/2017/05/31/Numpy数组解惑

欢迎大家关注我们的公众号:知识沉淀部落。
知识沉淀部落


作者:Subranium



纯干货 NumPy

需要 登录 后方可回复, 如果你还没有账号请 注册新账号