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]

如果绘制分布图,将类似于以下图表

生成随机数的示例 Numbers 使用 NumPy
生成随机数的示例 Numbers 使用 NumPy

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个数组的矩阵乘积。