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])
下列是数组生成函数:
- array :将输入数据(可以是列表、元组、数组以及其他序列)转换为ndarray,如不显式指明数据,将自动推断,默认复制所有的输入数据。
- asarray :将输入数据转换为ndarray,但如果输入以及是ndarray则不再复制。
- arange :Python内建函数range的数组版,返回一个数组。
- ones :根据给定形状和数据类型生成全1数组。
- ones_like :根据所给的数组生成一个形状一样的全1数组。
- zeros :根据给定形状和数据类型生成全0数组。
- zeros_like :根据所给的数组生成一个形状一样的全0数组。
- empty :根据给定形状生成一个没有初始化数值的空数组。
- empty_like :根据所给的数组生成一个形状一样但没有初始化数值的空数组。
- full :根据给定形状和数据类型生成指定数值的数组。
- full_like :根据所给的数组生成一个形状一样但内容是指定数值的数组。
- eye,identity :生成一个N * N特征矩阵(对角线位置都是1,其余位置是0)