简单 Python 快乐之旅之:Python 基础语法之 Numpy 专题


在使用 2D 数组或多维数组时,Python 的 Numpy 库非常有用。比如,在图像处理的工作中,你必须得把像素值存放在一个二维或三维数组中。
Python 仅支持一维数组。它并不支持多维数组。Numpy 是对 Python 数组的一个扩展,它不仅支持多维数组,而且还提供了基于多维数组的数学运算。

1. Pycharm 导入 Numpy 模块

在编写 Numpy 程序之前,Pycharm 需要先导入 Numpy 模块,否则你在编译执行的时候可能会遇见 No module named ‘numpy’ 的错误。详情请参考博客《PyCharm 编写 Numpy 程序时报 No module named ‘numpy‘ 错误的解决》。

2. Python Numpy 简介

默认情况下,Python 没有数组的概念,并且没有对多维数组的内置支持。
Python Numpy是一个轻松处理多维数组的库。 它具有丰富的功能集合,可以轻松处理数组。 尤其是随着Python在数据分析和科学项目中的使用量增加,numpy已成为处理数组时Python不可或缺的一部分。
Python Numpy是一个轻松处理多维数组的库。它具有丰富的功能集合可以轻松处理数组。 尤其是随着 Python 在数据分析和科学项目中的使用量增加,numpy 已成为处理数组时 Python 不可或缺的一部分。
接下来我们以一系列的 Numpy 示例来帮助你理解使用 numpy 库和 Python 编程语言。

3. Numpy - 创建一维数组

顾名思义,一维数组仅包含一维元素。或者说,Numpy 数组在形状上体现为只包含一个值的元组。
要创建一个一维数组,你可以使用 Numpy 的 array()、arange() 或 linspace() 的任意一个函数。

3.1. 使用 array() 函数创建 1D Numpy 数组

Numpy array() 函数使用一个列表的元素参数并返回一个一维数组。
在接下来的示例中我们将引入 numpy 库并使用 array() 函数来创建一个一维数组。

import numpy as np

# create numpy array
a = np.array([5, 8, 12])
print(a)

执行和输出:
创建一个一维数组.png

3.2. 使用 arange() 函数创建 1D Numpy 数组

arange() 函数以参数 start、end 作为取值范围并以参数 interval 为步长来创建一个一维 numpy 数组。
[start, start+interval, start+2*interval, … ]
接下来我们引入 numpy 库并使用 arange() 函数来创建一个一维的 numpy 数组。

import numpy as np

# create numpy array
a = np.arange(5, 14, 2)
print(a)

执行和输出:
用 arange() 函数来创建一个一维的 numpy 数组.png

可见,该数组起始于 5,以 2 为步长,直到 14 为止。

3.3. 使用 linspace() 函数创建 1D Numpy 数组

Numpy 的 linspace() 函数以参数 start、end 作为数组的始、终元素,并以参数 number 作为要创建数组的元素总个数来创建一个一维的均匀间隔的数字数组。
接下来我们引入 numpy 库并使用 linspace() 函数来创建一个一维的 numpy 数组。

import numpy as np

# create numpy array
a = np.linspace(5, 25, 4)
print(a)

执行和输出:
使用 linspace() 函数创建 1D Numpy 数组.png

3.4. 小结

在本小节中,我们通过简单详尽的示例来了解到了使用不同的内置函数来创建一个 numpy 一维数组。

4. 创建随机值的数组

4.1. numpy 中 的 shape

shape 包含于 numpy 库,是矩阵的属性,可以获取矩阵的形状,获取的结果是一个元组。
要创建有随机值的特定 shape 的 numpy 数组,使用 numpy.random.rand(),并将该数组的 shape 作为参数传递。
在本小节中,我们将来了解创建一个有随机值的 numpy 数组的例子。

4.2. numpy.random.rand() 的语法

rand() 函数的语法如下:

numpy.random.rand(d0,d1,d2,...,dN)

其中,d0、d1、d2、…是数组中每维的大小。
比如,numpy.random.rand(2,4) 意味着一个 shape 2x4 的二维数组,而 numpy.random.rand(51,4,8,3) 则意味着一个 shape 为 51x4x8x3 的思维数组。
可见,该函数返回一个指定 shape 并使用 0 到 1 之间随机浮点数填充的 numpy 数组。

4.3. 创建一个一维的随机值 numpy 数组

要创建一个随机值的一维 numpy 数组,只需将该数组大小传递给 rand() 函数即可。
在本示例中,我们将创建一个长度为 7 的一维随机值数组。

import numpy as np

# numpy array with random values
a = np.random.rand(7)

print(a)

执行和输出:
创建一个一维的随机值 numpy 数组.png

4.4. 创建一个二维的随机值 numpy 数组

要创建一个随机值的二维 numpy 数组,只需将该两维各自大小传递给 rand() 函数即可。
在本示例中,我们将创建一个 dimension-0 长度为 2,dimension-1 长度为 4 的两维随机值数组。

import numpy as np

# numpy array with random values
a = np.random.rand(2, 4)

print(a)

执行和输出:
创建一个二维的随机值 numpy 数组.png

4.5. 创建一个三维的随机值 numpy 数组

要创建一个随机值的三维 numpy 数组,只需将该三维各自大小传递给 rand() 函数即可。
在本示例中,我们将创建一个每维长度分别为 4、2、3 的三维随机值数组。

import numpy as np

# numpy array with random values
a = np.random.rand(4, 2, 3)

print(a)

执行和输出:
创建一个三维的随机值 numpy 数组.png

4.6. 小结

在本小节的示例中,我们学会了如何使用 numpy.random.rand() 来创建不同维度的随机值数组。

5. 将 Numpy 数组存放到文件 & 从文件中读取 Numpy 数组

你可以使用 numpy.save() 将 numpy 数组存放到一个文件,也可以在之后的某个时间使用 numpy.load() 将文件中的内容加载到 numpy 数组。
以下是一个代码片段示意,首先我们使用 save() 函数将数组写入文件,然后我们又使用 load() 函数将该文件加载到一个 numpy 数组。

# save array to file
numpy.save(file, array)
# load file to array
array = numpy.load(file)

5.1. 存放数组到文件

在接下来的示例中,我们将初始化一个数组,然后以 write binary 模式创建并打开一个文件,最后我们使用 numpy.save() 方法将该数组写入一个文件中。

import numpy as np

# initialize an array
arr = np.array([[[11,11,9,9],[11,0,2,0]],
                [[10,14,9,14],[0,1,11,11]]])

# open a binary file in write mode
file = open("arr", "wb")
# save array to the file
np.save(file, arr)
# close the file
file.close()

执行和输出:
存放数组到文件.png

查看当前程序工作目录(即项目目录)发现有名为 arr 的文件生成:
项目目录发现有名为 arr 的文件生成.png

请注意在保存好数组到文件之后,别忘了关掉该文件。

5.2. 从文件中加载 numpy 数组

在本示例中,我们将从文件中加载一个数组。我们将在上面的保存数组到文件的基础上,继续去从该文件中读取数组。

import numpy as np

# initialize an array
arr = np.array([[[11,11,9,9],[11,0,2,0]],
                [[10,14,9,14],[0,1,11,11]]])

# open a binary file in write mode
file = open("arr", "wb")
# save array to the file
np.save(file, arr)
# close the file
file.close()

# open the file in read binary mode
file = open("arr", "rb")
# read the file to numpy array
arr1 = np.load(file)
print(arr1)
# close the file
file.close()

执行和输出:
从文件中加载 numpy 数组.png

可以看到,我们已经成功从文件中读取到 numpy 数组并使用该数组生成了一个对象。

5.3. 小结

在本小节中,我们学习到了如何将一个 numpy 数组保存到文件,以及如何从文件中加载 numpy 数组到程序中的一个对象中去。

参考资料

posted @ 2020-09-17 20:22  Defonds  阅读(48)  评论(0编辑  收藏  举报