在 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=True或False)说明:
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 参数来实现。
