NumPy 创建数组

在 NumPy 中,创建数组的函数很多,常用的下表所示。

NumPy 创建数组的函数
函数 说明
numpy.array() 最常用函数
numpy.arange() 创建某个范围的数组,指定步长
numpy.linspace() 创建某个范围的数组,指定个数
numpy.zeros() 创建全 0 数组
numpy.ones() 创建全 1 数组

除了上表列出这些函数,NumPy 还有一个 empty() 函数。不过 empty() 函数在实际开发中用得并不多,这里就不展开介绍了。

numpy.array() 创建数组

在 NumPy 中,我们可以使用 array() 函数来创建一个数组。其中,array() 是 NumPy 中最基础也是最常用的一个函数。

语法:

numpy.array(列表或元组)

说明:

array() 函数的参数可以是一个列表,也可以是一个元组。array() 函数其实非常简单,它其实就是将一个列表转换为一个数组,或者将一个元组转换成一个数组。

示例 1:将列表转为数组

import numpy as np

arr = np.array([1, 2, 3, 4, 5])
print(arr)
print(type(arr))
print(arr.dtype)

运行结果如下。

[1 2 3 4 5]
<class 'numpy.ndarray'>
int64

分析:

从输出结果可以看出来,数组元素之间是用空格隔开的,而不是用逗号隔开的,这一点和列表不一样。dtype 属性用于获取数组元素的类型,这个我们在下一节会详细介绍。

array() 函数会自动根据 “列表元素的类型” 来推断 “数组元素的数据类型”。np.array() 返回的是一个 ndarray 对象,这个 ndarray 对象非常重要,我们在后面会大量接触到,大家先记一下。

可能小伙伴会问:“为什么要将一个列表转换成数组呢?” 原因很简单,对于一个列表来说,我们只能使用列表的函数来进行操作。但是将列表转换成数组之后,我们就可以使用数组提供的丰富函数来进行操作了。

示例 2:将元组转为数组

import numpy as np

arr = np.array((1, 2, 3, 4, 5))
print(arr)
print(type(arr))
print(arr.dtype)

运行结果如下。

[1 2 3 4 5]
<class 'numpy.ndarray'>
int64

分析:

np.array() 除了可以将一个列表转换成数组,还可以将一个元组转换成数组。不过在实际开发中,我们更多的是将一个列表转换成数组。

numpy.arange() 创建数组

在 NumPy 中,我们可以使用 arange() 函数来创建元素值为 “指定范围” 的一维数组。特别注意,arange() 函数只能创建一维数组,而不能创建多维数组。

语法:

numpy.arange(start, end, step)

说明:

arange() 和 Python 中的 range() 函数非常相似,start 是开始值,end 是结束值,step 是步长。arange() 函数的取值范围为 [start, end),也就是包含开始值,但是不包含结束值。

  • 当 arange() 函数有 1 个参数时,表示只有结束值,此时开始值是从 0 开始的。
  • 当 arange() 函数有 2 个参数时,表示只有开始值和结束值,此时开始值是从 start 开始的。
  • 当 arange() 函数有 3 个参数时,表示有开始值、结束值和步长。所谓的步长,指的是元素递增的量。

示例 3:arange() 带 1 个参数

import numpy as np

arr = np.arange(10)
print(arr)

运行结果如下。

[0 1 2 3 4 5 6 7 8 9]

分析:

np.arange(10) 表示结束值为 10,也就是取值范围为:[0, 10)。从结果可以看出来,结束值是不被包含进去的。小伙伴记住这一点就可以了:不管 np.arange() 参数是多少个,结束值都不会被包含进去

对于这个例子来说,下面 3 种方式是等价的,小伙伴们可以思考一下为什么。

# 方式 1
np.arange(10)

# 方式 2
np.arange(0, 10)

# 方式3
np.arange(0, 10, 1)

示例 4:arange() 带 2 个参数

import numpy as np

arr = np.arange(5, 10)
print(arr)

运行结果如下。

[5 6 7 8 9]

分析:

np.arange(5, 10) 表示开始值为 5,结束值为 10,也就是取值范围为:[5, 10)。对于这个例子来说,下面 2 种方式是等价的。

# 方式 1
np.arange(5, 10)

# 方式 2
np.arange(5, 10, 1)

示例 5:arange() 带 3 个参数

import numpy as np

arr = np.arange(10, 30, 3)
print(arr)

运行结果如下。

[10 13 16 19 22 25 28]

分析:

np.arange(10, 30, 3) 取值范围为 [10, 30),步长为 3。当然了,np.arange() 不仅仅可以用于创建元素是整型的数组,还可以用于创建元素是浮点型的数组。

示例 6:元素是浮点数

import numpy as np

arr = np.arange(1.5, 10.5, 2)
print(arr)

运行结果如下。

[1.5 3.5 5.5 7.5 9.5]

分析:

np.arange(1.5, 10.5, 2) 取值范围为 [1.5, 10.5),步长为 2。

示例 7:步长是浮点数

import numpy as np

arr = np.arange(1, 10, 1.5)
print(arr)

运行结果如下。

[1.  2.5 4.  5.5 7.  8.5]

分析:

np.arange(1, 10, 1.5) 取值范围为 [1, 10),步长为 1.5。np.arange() 函数和 range() 函数非常相似,但是它们之间也有一定的区别:range() 函数的步长只能是一个整数,而 np.arange() 函数可以是任意数(包括整数和浮点数)

此外,arange() 函数只能创建一维数组,如果想要创建多维数组,我们可以结合 reshape() 函数来实现。

numpy.linspace() 创建数组

除了 arange() 函数之外,我们还可以使用 linspace() 函数来创建元素值为 “指定范围” 的一维数组。其中,arange() 函数需要指定步长,而 linspace() 函数需要指定个数。

语法:

numpy.linspace(start, end, num, endpoint=TrueFalse)

说明:

start 是开始值,end 是结束值,num 是生成的元素个数(默认为 50)。默认情况下,linspace() 的取值范围为 [start, end],也就是包含开始值和结束值。但是我们可以使用 endpoint = False,从而使得它的取值范围为 [start, end)。

arange() 和 linspace() 这两个函数相似,不过它们之间存在以下 2 个区别。

  • arange():需要指定步长,linspace() 不需要指定步长,不过需要给出元素个数。
  • arange():取值范围为 [start, end),linspace() 函数的取值范围为 [start, end]。

示例 8:包含结束值

import numpy as np

arr = np.linspace(0, 10, 20)
print(arr)

运行结果如下。

[ 0.          0.52631579  1.05263158  1.57894737  2.10526316  2.63157895
  3.15789474  3.68421053  4.21052632  4.73684211  5.26315789  5.78947368
  6.31578947  6.84210526  7.36842105  7.89473684  8.42105263  8.94736842
  9.47368421 10.        ]

分析:

np.linspace(0, 10, 20) 表示开始值为 0,结束值为 10,元素个数为 20。需要注意的是,np.linspace(0, 10, 20) 的取值区间为 [0, 10],也就是包含结束值 10。如果不希望把结束值包含进去,我们可以使用 endpoint = False 来实现。

示例 9:不包含结束值

import numpy as np

arr = np.linspace(0, 10, 20, endpoint=False)
print(arr)

运行结果如下。

[0.  0.5 1.  1.5 2.  2.5 3.  3.5 4.  4.5 5.  5.5 6.  6.5 7.  7.5 8.  8.5  9.  9.5]

numpy.zeros() 和 numpy.ones() 创建数组

在 NumPy 中,我们可以使用 zeros() 函数来创建一个全 0 数组,也可以使用 ones() 函数来创建一个全 1 的数组。

语法:

numpy.zeros((a, b, ..., n), dtype=数据类型)
numpy.ones((a, b, ..., n), dtype=数据类型)

说明:

zeros() 和 ones() 都可以接收 2 个参数。第 1 个参数是一个元组,它是一个必选参数,表示创建一个 a × b × ... × n 的数组。

第 2 个参数是一个可选参数,它用于定义元素的类型,默认是 float。

示例 10:默认情况

import numpy as np

arr1 = np.zeros((3, 3))
arr2 = np.ones((3, 3))
print(arr1)
print(arr2)

运行结果如下。

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

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

分析:

实际上,np.zeros((3, 3)) 是一种简写方式,它其实等价于 np.zeros(shape=(3,3))。对于 shape 参数来说,它的值是一个元组或列表,所以下面 2 种方式是等价的。这 2 种方式在很多书或教程中会出现,我们也要了解一下。

# 方式 1
arr1 = np.zeros((3, 3))
arr2 = np.ones((3, 3))

# 方式 2
arr1 = np.zeros([3, 3])
arr2 = np.ones([3, 3])

默认情况下,zeros() 和 ones() 创建的数组元素都是 float 类型,下面 2 种方式是等价的。

# 方式 1
arr1 = np.zeros((3, 3))
arr2 = np.ones((3, 3))

# 方式 2
arr1 = np.zeros((3, 3), dtype=float)
arr2 = np.ones((3, 3), dtype=float)

示例 11:int 类型

import numpy as np

arr1 = np.zeros((3, 3), dtype=int)
arr2 = np.ones((3, 3), dtype=int)
print(arr1)
print(arr2)

运行结果如下。

[[0 0 0]
 [0 0 0]
 [0 0 0]]

[[1 1 1]
 [1 1 1]
 [1 1 1]]

分析:

如果想要将数组元素定义成 int 类型,我们使用 dtype 参数来实现。

上一篇: NumPy 数组

下一篇: NumPy 随机数组

给站长反馈

绿叶网正在不断完善中,小伙伴们如果发现任何问题,还望多多给站长反馈,谢谢!

邮箱:lvyenet@vip.qq.com

「绿叶网」服务号
绿叶网服务号放大
关注服务号,微信也能看教程。
绿叶网服务号