Python NumPy 初学者教程:通过示例学习
NumPy 是什么 Python?
NumPy的 是一个开源库, Python,它有助于数学、科学、工程和数据科学编程。这是一个非常有用的库,可以执行数学和统计运算 Python。它非常适合多维数组和矩阵乘法。它很容易与 C/C++ 和 Fortran.
对于任何科学项目来说,NumPy 都是必备工具。它专为处理 N 维数组、线性代数、随机数、傅里叶变换等而设计。
NumPy 是一种处理多维数组和矩阵的编程语言。除了数组和矩阵之外,NumPy 还支持大量数学运算。在本部分中,我们将回顾您需要了解的有关 ' 教程的基本函数TensorFlow“。
为什么使用 NumPy?
NumPy 具有内存效率,这意味着它可以比任何其他库更轻松地处理大量数据。此外,NumPy 使用起来非常方便,尤其是矩阵乘法和重塑。最重要的是,NumPy 速度很快。事实上,TensorFlow 和 Scikit 学习使用 NumPy 数组在后端计算矩阵乘法。
如何安装 NumPy
要安装 NumPy 库,请参阅我们的教程 如何安装 TensorFlow。NumPy 是随 Anaconda 默认安装的。
在远程情况下,NumPy 未安装-
您可以使用 Anaconda 安装 NumPy:
conda install -c anaconda numpy
- In Jupyter 笔记本 :
import sys !conda install --yes --prefix {sys.prefix} numpy
导入 NumPy 并检查版本
导入numpy的命令是:
import numpy as np
上面的代码将 Numpy 命名空间重命名为 np。这允许我们在 Numpy 函数、方法和属性前加上“np”,而不是输入“numpy”。这是 numpy 文献中的标准快捷方式
要检查您安装的 NumPy 版本,请使用以下命令:
print (np.__version__)
输出:
1.18.0
什么是 Python NumPy 数组?
NumPy 数组有点像 Python 列表,但同时又有很大不同。对于那些刚接触这个话题的人,让我们来澄清一下它到底是什么以及它有什么用处。
正如名称所示,NumPy 数组是 numpy 库的核心数据结构。该库的名称实际上是“Numeric Python”或“数值 Python“。
创建 NumPy 数组
在 Numpy 中创建数组的最简单方法是使用 Python 列表
myPythonList = [1,9,8,3]
使用对象 np.array 将 python 列表转换为 numpy 数组。
numpy_array_from_list = np.array(myPythonList)
显示列表内容
numpy_array_from_list
输出:
array([1, 9, 8, 3])
在实践中,没有必要声明 Python 列表。操作可以组合。
a = np.array([1,9,8,3])
注意:Numpy 文档指出使用 np.ndarray 创建数组。但是,这是推荐的方法。
您还可以从 Tuple 创建一个 numpy 数组。
数学的 Opera数组上的系统蒸发散
您可以对数组执行数学运算,例如加法、减法、除法和乘法。语法是数组名称后跟运算(+、-、*、/),后跟操作数
计费示例:
numpy_array_from_list + 10
输出:
array([11, 19, 18, 13])
此操作将 numpy 数组的每个元素加 10。
数组形状
您可以使用对象形状加上数组名称来检查数组的形状。同样,您可以使用 dtypes 检查类型。
import numpy as np a = np.array([1,2,3]) print(a.shape) print(a.dtype) (3,) int64
整数是没有小数的值。如果创建带有小数的数组,则类型将更改为浮点数。
#### Different type b = np.array([1.1,2.0,3.2]) print(b.dtype) float64
二维数组
您可以使用“,”逗号添加维度
注意必须在括号[]内
### 2 dimension c = np.array([(1,2,3), (4,5,6)]) print(c.shape) (2, 3)
二维数组
更高维度可以如下构造:
### 3 dimension d = np.array([ [[1, 2,3], [4, 5, 6]], [[7, 8,9], [10, 11, 12]] ]) print(d.shape) (2, 2, 3)
目的 | 代码 |
---|---|
创建数组 | 数组([1,2,3]) |
打印形状 | 数组([.]).形状 |
什么是 numpy.zeros()?
numpy.zeros() 或 np.zeros Python 函数用于创建一个充满零的矩阵。numpy.zeros() 在 Python 可以在 TensorFlow 和其他统计任务中第一次迭代期间初始化权重时使用。
numpy.zeros() 函数语法
numpy.zeros(shape, dtype=float, order='C')
Python numpy.zeros() 参数
在这里,
- 形状:是 numpy 零数组的形状
- 类型:是 numpy zeros 中的数据类型。它是可选的。默认值为 float64
- 下单:默认值为 C,这是 numpy.zeros() 的基本行样式 Python.
Python numpy.zeros() 示例
import numpy as np np.zeros((2,2))
输出:
array([[0., 0.], [0., 0.]])
numpy zero 及其数据类型的示例
import numpy as np np.zeros((2,2), dtype=np.int16)
输出:
array([[0, 0], [0, 0]], dtype=int16)
什么是 numpy.ones()?
np.ones() 函数 用于创建一个全为 1 的矩阵。numpy.ones() 在 Python 可以在 TensorFlow 和其他统计任务中第一次迭代期间初始化权重时使用。
Python numpy.ones() 语法
numpy.ones(shape, dtype=float, order='C')
Python numpy.ones() 参数
在这里,
- 形状:是 np.ones 的形状 Python 排列
- 类型:numpy 中的数据类型,可选,默认值为 float64
- 下单:默认为 C,这是一种必需的行样式。
Python numpy.ones() 二维数组及其数据类型示例
import numpy as np np.ones((1,2,3), dtype=np.int16)
输出:
array([[[1, 1, 1], [1, 1, 1]]], dtype=int16)
numpy.reshape() 函数 Python
Python NumPy 重塑 函数用于在不改变数组数据的情况下对数组进行整形。在某些情况下,您可能需要将数据从宽整形为长。您可以使用 np.reshape 函数来实现这一点。
np.reshape() 的语法
numpy.reshape(a, newShape, order='C')
在这里,
a:要重塑的数组
新形状:新的愿望塑造
下单:默认为 C,这是一种必需的行样式。
NumPy 重塑示例
import numpy as np e = np.array([(1,2,3), (4,5,6)]) print(e) e.reshape(3,2)
输出:
// Before reshape [[1 2 3] [4 5 6]]
//After Reshape array([[1, 2], [3, 4], [5, 6]])
numpy.flatten() 在 Python
Python NumPy 扁平化 函数用于返回一维数组的副本。处理某些神经网络(如 convnet)时,需要展平数组。您可以使用 np.flatten() 函数来实现这一点。
np.flatten() 的语法
numpy.flatten(order='C')
在这里,
下单:默认为 C,这是一种必需的行样式。
NumPy Flatten 示例
e.flatten()
输出:
array([1, 2, 3, 4, 5, 6])
numpy.hstack() 是什么 Python?
Numpy.hstack 是一个函数 Python 用于水平堆叠输入数组序列以形成单个数组。使用 hstack() 函数,您可以水平附加数据。这是 NumPy 中非常方便的函数。
让我们研究一下 hstack Python 举个例子:
计费示例:
## Horitzontal Stack import numpy as np f = np.array([1,2,3]) g = np.array([4,5,6]) print('Horizontal Append:', np.hstack((f, g)))
输出:
Horizontal Append: [1 2 3 4 5 6]
numpy.vstack() 是什么 Python?
Numpy.vstack 是一个函数 Python 它用于垂直堆叠输入数组序列以形成单个数组。使用 vstack() 函数,您可以垂直附加数据。
让我们通过一个例子来研究一下:
计费示例:
## Vertical Stack import numpy as np f = np.array([1,2,3]) g = np.array([4,5,6]) print('Vertical Append:', np.vstack((f, g)))
输出:
Vertical Append: [[1 2 3] [4 5 6]]
学习了NumPy vstack和hstack之后,我们来学习一个在NumPy中生成随机数的例子。
生成随机 Numbers 使用 NumPy
要生成高斯分布的随机数,请使用:
numpy.random.normal(loc, scale, size)
在这里,
- 地方:平均值。分布的中心
- 扩展:标准差。
- 尺码:返回次数
计费示例:
## Generate random nmber from normal distribution normal_array = np.random.normal(5, 0.5, 10) print(normal_array) [5.56171852 4.84233558 4.65392767 4.946659 4.85165567 5.61211317 4.46704244 5.22675736 4.49888936 4.68731125]
如果绘制分布图,将类似于以下图表
NumPy Asarray 函数
当您想要将输入转换为数组时,可以使用 asarray() 函数。输入可以是列表、元组、ndarray 等。
语法:
numpy.asarray(data, dtype=None, order=None)[source]
在这里,
data:要转换为数组的数据
数据类型:这是一个可选参数。如果未指定,则数据类型将从输入数据推断出来
下单:默认为 C,这是基本行样式。其他选项为 F(Fortan 样式)
计费示例:
考虑以下二维矩阵,该矩阵有四行和四列,填充 2
import numpy as np A = np.matrix(np.ones((4,4)))
如果你想改变矩阵的值,那是不可能的。原因是不可能改变副本。
np.array(A)[2]=2 print(A) [[1. 1. 1. 1.] [1. 1. 1. 1.] [1. 1. 1. 1.] [1. 1. 1. 1.]]
矩阵是不可变的。如果要在原始数组中添加修改,可以使用asarray。让我们看看当您想用值2更改第三行的值时是否会发生任何变化。
np.asarray(A)[2]=2 print(A)
代码说明:
np.asarray(A):将矩阵A转换为数组
[2]:选择第三行
输出:
[[1. 1. 1. 1.] [1. 1. 1. 1.] [2. 2. 2. 2.] # new value [1. 1. 1. 1.]]
什么是 numpy.arange()?
numpy.arange() 是一个内置的 numpy 函数,它返回一个包含定义间隔内均匀分布值的 ndarray 对象。例如,你想创建从 1 到 10 的值;你可以在 Python 功能。
语法:
numpy.arange(start, stop, step, dtype)
Python NumPy arange 参数:
- 开始:np.arange 间隔的开始 Python 功能。
- Stop 停止:间隔结束。
- 步骤:值之间的间距。默认步长为 1。
- 类型:是 NumPy arange 的一种数组输出 Python.
计费示例:
import numpy np np.arange(1, 11)
输出:
array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
计费示例:
如果你想改变这个NumPy arange函数中的步骤 Python 例如,您可以在括号中添加第三个数字。它将改变步骤。
import numpy np np.arange(1, 14, 4)
输出:
array([ 1, 5, 9, 13])
NumPy Linspace 函数
Linspace 提供均匀分布的样本。
语法:
numpy.linspace(start, stop, num, endpoint)
在这里,
- 开始:序列的起始值
- Stop 停止:序列的结束值
- 民:要生成的样本数。默认值为 50
- 端点:如果为 True(默认),则停止是最后一个值。如果为 False,则不包括停止值。
计费示例:
例如,它可用于创建从 10 到 1 均匀分布的 5 个值。
import numpy as np np.linspace(1.0, 5.0, num=10)
输出:
array([1. , 1.44444444, 1.88888889, 2.33333333, 2.77777778, 3.22222222, 3.66666667, 4.11111111, 4.55555556, 5. ])
如果不想在间隔中包含最后一位数字,可以将端点设置为false
np.linspace(1.0, 5.0, num=5, endpoint=False)
输出:
array([1. , 1.8, 2.6, 3.4, 4.2])
LogSpace NumPy 函数 Python
LogSpace 返回对数刻度上的等距数字。Logspace 具有与 np.linspace 相同的参数。
语法:
numpy.logspace(start, stop, num, endpoint)
计费示例:
np.logspace(3.0, 4.0, num=4)
输出:
array([ 1000. , 2154.43469003, 4641.58883361, 10000. ])
最后,如果要检查数组中元素的内存大小,可以使用 itemsize
x = np.array([1,2,3], dtype=np.complex128) x.itemsize
输出:
16
每个元素占用 16 个字节。
索引和切片 Python
使用 numpy 来切片数据很简单。我们将对矩阵“e”进行切片。注意,在 Python,需要使用括号返回行或列
计费示例:
## Slice import numpy as np e = np.array([(1,2,3), (4,5,6)]) print(e) [[1 2 3] [4 5 6]]
记住,numpy 的第一个数组/列从 0 开始。
## First column print('First row:', e[0]) ## Second col print('Second row:', e[1])
输出:
First row: [1 2 3] Second row: [4 5 6]
In Python和许多其他语言一样,
- 逗号前的值代表行
- 权利上的值代表列。
- 如果要选择一列,则需要在列索引前添加:。
- :表示您想要选定列的所有行。
print('Second column:', e[:,1])
Second column: [2 5]
返回第二行的前两个值。使用 : 选择到第二行为止的所有列
## Second Row, two values print(e[1, :2]) [4 5]
统计函数 Python
NumPy 有很多有用的统计函数,用于从数组中给定的元素中查找最小值、最大值、百分位标准差和方差等。函数解释如下 -
Numpy 配备了强大的统计函数,如下所示
功能 | 脾气暴躁的 |
---|---|
分钟 | np.min() |
max. | np.max() |
平均值 | np.mean() |
中位数 | np.中值() |
标准偏差 | np.std() |
考虑以下数组:
计费示例:
import numpy as np normal_array = np.random.normal(5, 0.5, 10) print(normal_array)
输出:
[5.56171852 4.84233558 4.65392767 4.946659 4.85165567 5.61211317 4.46704244 5.22675736 4.49888936 4.68731125]
NumPy 统计函数示例
### Min print(np.min(normal_array)) ### Max print(np.max(normal_array)) ### Mean print(np.mean(normal_array)) ### Median print(np.median(normal_array)) ### Sd print(np.std(normal_array))
输出:
4.467042435266913 5.612113171990201 4.934841002270593 4.846995625786663 0.3875019367395316
什么是 numpy 点积?
Numpy.dot 积 是一个强大的矩阵计算库。例如,你可以用 np.dot 计算点积。Numpy.dot 积是 a 和 b 的点积。numpy.dot() 在 Python 处理二维数组并执行矩阵乘法。
语法:
numpy.dot(x, y, out=None)
参数
在这里,
x,y:输入数组。x 和 y 都必须是一维或二维,np.dot() 函数才能正常工作
:这是要返回的一维数组标量的输出参数。否则应返回 ndarray。
Returns & Exchanges
函数 numpy.dot() Python 返回两个数组 x 和 y 的点积。如果 x 和 y 都是一维的,则 dot() 函数返回标量;否则,返回数组。如果给出了“out”,则返回它。
引发
点积 Python 如果 x 的最后一个维度与 y 的倒数第二个维度的大小不同,则会引发 ValueError 异常。
计费示例:
## Linear algebra ### Dot product: product of two arrays f = np.array([1,2]) g = np.array([4,5]) ### 1*4+2*5 np.dot(f, g)
输出:
14
矩阵乘法 Python
Numpy matmul() 函数用于返回 2 个数组的矩阵乘积。它的工作原理如下
1)二维数组,返回正常产品
2)维度> 2,产品被视为矩阵的堆栈
3)首先将一维数组提升为矩阵,然后计算乘积
语法:
numpy.matmul(x, y, out=None)
在这里,
x,y:输入数组。不允许使用标量
:这是可选参数。通常输出存储在 ndarray 中
计费示例:
以同样的方式,你可以用 np.matmul 计算矩阵乘法
### Matmul: matruc product of two arrays h = [[1,2],[3,4]] i = [[5,6],[7,8]] ### 1*5+2*7 = 19 np.matmul(h, i)
输出:
array([[19, 22], [43, 50]])
行列式
最后但同样重要的一点是,如果您需要计算行列式,则可以使用 np.linalg.det()。请注意,numpy 会处理维度。
计费示例:
## Determinant 2*2 matrix ### 5*8-7*6np.linalg.det(i)
输出:
-2.000000000000005
结语
- Python 是一个开源库, Python,有助于数学、科学、工程和 数据科学编程.
- numpy.zeros() 或 np.zeros Python 函数用于创建一个充满零的矩阵。
- numpy.ones() 在 Python 可以在 TensorFlow 和其他统计任务中第一次迭代期间初始化权重时使用。
- Python NumPy Reshape 函数用于塑造数组而不改变其数据。
- Python NumPy Flatten 函数用于返回一维数组的副本。
- Numpy.hstack 是一个函数 Python 用于水平堆叠输入数组序列以形成单个数组。
- Numpy.vstack 是一个函数 Python 用于垂直堆叠输入数组序列以形成单个数组。
- numpy.arange() 是一个内置的 numpy 函数,它返回一个包含定义间隔内均匀分布值的 ndarray 对象。
- Numpy.dot 积是一个强大的矩阵计算库。
- Numpy matmul() 函数用于返回2个数组的矩阵乘积。