Numpy的核心特征之一就是N-维数组对象——ndarray。ndarray是Python中一个快速。灵活的大型数据集容器。数组允许你使用类似于标量的操作语法在整块数据上进行数据计算。
为了让大家感受下Numpy,首先导入Numpy,再生成一个小的随机数组:
import numpy as np
#生成随机数组
data = np.random.rand(2,3)
data
array([[0.91666618, 0.65477897, 0.47119754],
[0.01575175, 0.54662481, 0.02147491]])
我们可以给data加上一个数学操作:
data * 10
array([[9.16666176, 6.54778974, 4.71197543],
[0.15751747, 5.46624805, 0.21474909]])
data + data
array([[1.83333235, 1.30955795, 0.94239509],
[0.03150349, 1.09324961, 0.04294982]])
(Numpy的导入方式import numpy as np 。当然也可以在代码中使用**from numpy import *** 来省略多写的一个np,建议使用标准导入的导入方式。)
一个ndarray是一个通用的多维同类数据容器,也就是说,它包含的每一个元素均为相同类型。每一个数组都有一个shape属性,用来表征数组每一维度的数量,每一个数组都有一个dtype属性,用来描述数据的 数据类型 :
data.shape
(2, 3)
data.dtype
dtype('float64')
当你看到“数组”、“Numpy数组”或“ndarray”时,他们都表示同一个对象:ndarray对象。
生成数组最简单的方式就是使用array函数 。array函数接收任意的序列型对象(当然也包括其他的数组),生成一个新的包含传递数据的Numpy数组。例如,列表的转换就是一个好例子:
data1 = [6,7.5,8,0,1]
arr1 = np.array(data1)
arr1
array([6. , 7.5, 8. , 0. , 1. ])
嵌套序列,例如同等长度的列表,将会自动转换成多维数组:
data2 = [1,2,3,4],[5,6,7,8]
arr2 = np.array(data2)
arr2
array([[1, 2, 3, 4],
[5, 6, 7, 8]])
因为data2是一个包含列表的列表,所以Numpy数组arr2形成了一个二维数组。我们可以通过检查ndim和shape属性来确认这一点:
arr2.ndim
2
arr2.shape
(2, 4)
除非显示地指定,否则np.array会自动推断生成的数据类型。数据类型被储存在一个特殊的元数据dtype中。例如:
arr1.dtype
dtype('float64')
arr2.dtype
dtype('int32')
除了np.array,还有很多其他函数可以创建新数组。例如,给定长度及形状后,zeros可以一次性创造全0数组,ones可以一次性创造全1数组。empty则可以创建一个没有初始化数值的数组。想要创建高维数组,则需要为shape传递一个元组:
np.zeros(10)
array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])
np.zeros((3,6))
array([[0., 0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0., 0.]])
np.empty((2,3,2))
array([[[0., 0.],
[0., 0.],
[0., 0.]],
[[0., 0.],
[0., 0.],
[0., 0.]]])
使用np.empty来生成一个全0数组,并不安全,有些时候它可能会返回未初始化的垃圾数值。
arange是Python内建函数range的数组版:
np.arange(15)
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14])
下列是数组生成函数: