01_NumPy介绍,什么是NumPy,Python应用、(NumPy、SciPy、Matplotlib相关网址)--来自菜鸟和NumPy中文网

转自:https://www.runoob.com/numpy/numpy-tutorial.html
https://www.numpy.org.cn/article/basics/understanding_numpy.html#什么是-numpy
(怕后面该网址没有了,转载作为自己的学习笔记)

1、NumPy教程

NumPy(Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。

NumPy 的前身 Numeric 最早是由 Jim Hugunin 与其它协作者共同开发,2005 年,Travis Oliphant 在 Numeric 中结合了另一个同性质的程序库 Numarray 的特色,并加入了其它扩展而开发了 NumPy。NumPy 为开放源代码并且由许多协作者共同维护开发。

NumPy是一个运行速度非常快的数学库,主要用于数组计算,包含:
一个强大的N维数组对象ndarray
广播功能函数
整合C/C++/Fortran代码的工具
线性代数、傅里叶函数、随机数生成等功能

1.1、什么是Numpy?

NumPy是一个功能强大的Python库,主要用于对多维数组执行计算。NumPy这个词来源于两个单词-- Numerical和Python。NumPy提供了大量的库函数和操作,可以帮助程序员轻松地进行数值计算。这类数值计算广泛用于以下任务:

机器学习模型:在编写机器学习算法时,需要对矩阵进行各种数值计算。例如矩阵乘法、换位、加法等。NumPy提供了一个非常好的库,用于简单(在编写代码方面)和快速(在速度方面)计算。NumPy数组用于存储训练数据和机器学习模型的参数。

图像处理和计算机图形学:计算机中的图像表示为多维数字数组。NumPy成为同样情况下最自然的选择。实际上,NumPy提供了一些优秀的库函数来快速处理图像。例如,镜像图像、按特定角度旋转图像等。

数学任务:NumPy对于执行各种数学任务非常有用,如数值积分、微分、内插、外推等。因此,当涉及到数学任务时,它形成了一种基于Python的MATLAB的快速替代。

1.2、NumPy应用

NumPy 通常与 SciPy(Scientific Python)和 Matplotlib(绘图库)一起使用, 这种组合广泛用于替代 MatLab,是一个强大的科学计算环境,有助于我们通过 Python 学习数据科学或者机器学习。

SciPy 是一个开源的 Python 算法库和数学工具包。

SciPy 包含的模块有最优化、线性代数、积分、插值、特殊函数、快速傅里叶变换、信号处理和图像处理、常微分方程求解和其他科学与工程中常用的计算。

Matplotlib 是 Python 编程语言及其数值数学扩展包 NumPy 的可视化操作界面。它为利用通用的图形用户界面工具包,如 Tkinter, wxPython, Qt 或 GTK+ 向应用程序嵌入式绘图提供了应用程序接口(API)。

1.3、相关链接

  • NumPy 官网 http://www.numpy.org/
  • NumPy 源代码:https://github.com/numpy/numpy
  • SciPy 官网:https://www.scipy.org/
  • SciPy 源代码:https://github.com/scipy/scipy
  • Matplotlib 官网:https://matplotlib.org/
  • Matplotlib 源代码:https://github.com/matplotlib/matplotlib

1.4 NumPy安装

在你的计算机上安装NumPy的最快也是最简单的方法是在shell上使用以下命令:

pip install numpy

这将在你的计算机上安装最新/最稳定的NumPy版本。通过PIP安装是安装任何Python软件包的最简单方法。现在让我们来谈谈NumPy中最重要的概念,NumPy数组。

如果是Anacanda中使用conda安装的话,命令是:

conda install numpy

在这里插入图片描述

1.5 NumPy中的数组

NumPy提供的最重要的数据结构是一个称为NumPy数组的强大对象。NumPy数组是通常的Python数组的扩展。NumPy数组配备了大量的函数和运算符,可以帮助我们快速编写上面讨论过的各种类型计算的高性能代码。让我们看看如何快速定义一维NumPy数组:

# -*- coding: UTF-8 -*-

import numpy as np
my_array = np.array([1,2,3,4,5])
print(my_array)

最后,运行结果如下:

Python 3.7.4 (default, Aug  9 2019, 18:34:13) [MSC v.1915 64 bit (AMD64)]
Type 'copyright', 'credits' or 'license' for more information
IPython 7.8.0 -- An enhanced Interactive Python. Type '?' for help.
PyDev console: using IPython 7.8.0
Python 3.7.4 (default, Aug  9 2019, 18:34:13) [MSC v.1915 64 bit (AMD64)] on win32
In[2]: runfile('E:/workspace/numpy/numpy/01_numpy数组.py', wdir='E:/workspace/numpy/numpy')
[1 2 3 4 5]

在上面的简单示例中,我们首先使用import numpy作为np导入NumPy库。然后,我们创建了一个包含5个整数的简单NumPy数组,然后我们将其打印出来。继续在自己的机器上试一试。在看 “NumPy安装” 部分下面的步骤的时候,请确保已在计算机中安装了NumPy。

现在让我们看看我们可以用这个特定的NumPy数组能做些什么。

print(my_array.shape)

它会打印我们创建的数组的形状:(5,)。意思就是my_array是一个包含5个元素的数组。
我们也可以打印各个元素。就像普通的Python数组一样,NumPy数组的起始索引编号为0.

print(my_array[0])
print(my_array[1])

运行结果是:

1
2

上述命令将分别在终端上打印1和2.我们还可以修改NumPy数组的元素。例如,加入我们编写以下2个命令:

my_array[0] = -1
print(my_array)

我们将在屏幕上看到:[-1 2 3 4 5]
现在假设,我们要创建一个长度为5的NumPy数组,但所有元素都为0,我们可以这样做吗?是的。NumPy提供了一种简单的方法来做同样的事情。

my_new_array = np.zeros((5))
print(my_new_array)

我们将看到输出了[0. 0. 0. 0. 0.]。与np.zeros类似,我们也有np.ones。如果我们想创建一个随机值数组怎么办?

my_random_array = np.random.random((5))
print(my_random_array)

我们得到的输出看起来像 [0.22051844 0.35278286 0.11342404 0.79671772 0.62263151] 这样的数据。你获得的输出可能会有所不同,因为我们使用的是随机函数,它为每个元素分配0到1之间的随机值。

现在让我们看看如何使用NumPy创建二维数组。

my_2d_array = np.zeros((2,3))
print(my_2d_array)

这里是:

[[0. 0. 0.]
 [0. 0. 0.]]

猜猜以下代码的输出结果如何:

my_2d_array_new = np.ones((2,4))
print(my_2d_array_new)

这里是:

[[1. 1. 1. 1.]
 [1. 1. 1. 1.]]

基本上,当你使用函数np.zeros()或np.ones()时,你可以指定讨论数组大小的元组。在上面的两个例子中,我们使用以下元组,(2, 3) 和(2, 4) 分别表示2行,3列和4列。像上面那样的多维数组可以用 my_array[i][j] 符号来索引,其中i表示行号,j表示列号。i和j都从0开始。

my_array = np.array([[4,5],[6,1]])
print(my_array)
print(my_array[0][1])

输出结果是:

[[4 5]
 [6 1]]
5

上面的代码片段的输出是5,因为它是索引0行和索引1列中的元素。
你还可以按如下方式打印my_array的形状:

print(my_array.shape)

输出为(2,2),表示数组中有2行2列。

NumPy提供了一种提取多维数组的列/列的强大方法。例如,考虑我们上面定义的my_array的例子。

[[4,5],[6,1]]

假设,我们想从中提取第二列(索引1)的所有元素。在这里,我们肉眼可以看见,第二列由两个元素组成:5和1。为此,我们执行以下操作:

my_array_column_2 = my_array[:,1]
print(my_array_column_2)

注意,我们使用了冒号(:)而不是行号,而对于列号,我们使用了值1,最终输出是:[5, 1]。

我们可以类似地从多维NumPy数组中提取一行。现在,让我们看看NumPy在多个数组上执行计算时提供的强大功能。

1.6 NumPy中的数组操作

使用NumPy,你可以轻松在数组上执行数学运算。例如,你可以添加NumPy数组,你可以减去它们,你可以将它们相乘,甚至可以将它们分开。以下是一些例子:

# -*- coding: UTF-8 -*-

import numpy as np
a = np.array([[1.0, 2.0], [3.0, 4.0]])
b = np.array([[5.0, 6.0], [7.0, 8.0]])
sum = a + b
difference = a - b
product = a * b
quotient = a / b

print("Sum = \n",sum)
print("Difference = \n", difference)
print("Product = \n", product)
print("Quotient = \n", quotient)

运行结果:

Sum = 
 [[ 6.  8.]
 [10. 12.]]
Difference = 
 [[-4. -4.]
 [-4. -4.]]
Product = 
 [[ 5. 12.]
 [21. 32.]]
Quotient = 
 [[0.2        0.33333333]
 [0.42857143 0.5       ]]

如你所见,乘法运算符执行逐元素乘法而不是矩阵乘法。要执行矩阵乘法,你可以执行以下操作:

matrix_product = a.dot(b)
print("Matrix Product = ",matrix_product)

运行结果:

Matrix Product =  [[19. 22.]
 [43. 50.]]
发布了1051 篇原创文章 · 获赞 342 · 访问量 393万+

猜你喜欢

转载自blog.csdn.net/toto1297488504/article/details/104393153