NumPy简介
NumPy:Numerical Python,是python进行科学计算的一个基础包。
NumPy的数据结构
ndarry:N-dimensional array,一种由相同类型的元素组成的多维数组对象。
- 元素的数据类型由dtpye(data-type)对象来指定,每个ndarry只有一种dtype类型。
- 大小固定,创建好数组时一旦指定好大小,不会再发生改变
ndarry的创建
array函数:将序列转换成ndarry
//通过array函数创建 data1 = [0,1,2,3,1.1] arr1 = np.array(data1)
运行结果:
array([0. , 1. , 2. , 3. , 1.1])
嵌套序列创建:
//通过嵌套序列创建 data2 = [[1,2,3],[4,5,6]] arr2 = np.array(data2)
运行结果:
array([[1, 2, 3], [4, 5, 6]])
zeros函数:创建指定长度的全零数组
np.zeros(10)
运行结果:
array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])
创建多维:
np.zeros((3,4))
运行结果:
array([[0., 0., 0., 0.], [0., 0., 0., 0.], [0., 0., 0., 0.]])
ones函数:创建指定长度的全1数组
np.ones(10)
运行结果:
array([1., 1., 1., 1., 1., 1., 1., 1., 1., 1.])
创建多维:
np.ones((2,3))
运行结果:
array([[1., 1., 1.], [1., 1., 1.]])
- empty函数:创建一个没有具体值的数组,通常都是一些未初始化的垃圾值
运行结果:np.empty(5)
创建多维:array([0. , 1. , 2. , 3. , 1.1])
运行结果:np.empty((2,2,3))
array([[[0., 0., 0.], [0., 0., 0.]], [[0., 0., 0.], [0., 0., 0.]]])
- arange函数:类似range函数,通过开始值、终值和步长创建数组。创建的数组不包含终值值。
运行结果:np.arange(10)
根据起始值,步长创建:array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
运行结果:np.arange(1,10,1)
array([1, 2, 3, 4, 5, 6, 7, 8, 9])
- linspace函数:通过指定开始值、终值和元素个数来创建一维数组,可以通过endpoint关键字指定是否包括终值,缺省设置是包括终值
运行结果:np.linspace(1,10,5)
array([ 1. , 3.25, 5.5 , 7.75, 10. ])
- logspace函数:和linspace类似,用来创建等比数列
运行结果:np.logspace(0,2,5)
array([ 10. , 17.7827941 , 31.6227766 , 56.23413252, 100. ])
random函数:随机创建数组
np.random.random(10)
运行结果:
array([0.60751347, 0.29262802, 0.48379076, 0.06987773, 0.09515098, 0.1943465 , 0.46335728, 0.46320678, 0.81314993, 0.51329606])
通过设置参数创建:
np.random.random((2,2,3))
运行结果:
array([[[0.06608054, 0.55363782, 0.62406291], [0.77318127, 0.58557065, 0.17148664]], [[0.79126153, 0.83586225, 0.59518475], [0.60087036, 0.13638575, 0.7900084 ]]])
ndarry的属性
- ndim:维度数量
运行结果:arr1.ndim
1
- shape:表示各维度大小的元组
运行结果:arr2.shape
(2, 3)
- dtype:元素数据类型
运行结果:arr2.dtype
dtype('int32')
- size:元素总个数m*n
运行结果:arr2.size
6
ndarry的数据类型
创建数组时,可以通过dtype显式指定数据类型,如不指定NumPy会根据数据默认指定。例:
data3 = np.array([1,2,3,4,5])
data3.dtype
运行结果:
dtype('int32')
astype函数:数据类型转换
data4 = data3.astype(float)
data4.dtype
运行结果:
dtype('float64')
数组与标量、数组直接的运算
- 矢量化:不需要编写循环,可实现对数据的批量计算。性能上比Python快一两个数量级,大小相等的任何算术运算都会应用到元素级。
数组与标量之间的运算
arr1 = np.array([1,2,3,4,5]) arr1+2
运行结果:
array([3, 4, 5, 6, 7])
除法运算:
from __future__ import division 1/arr1
运行结果:
array([1. , 0.5 , 0.33333333, 0.25 , 0.2 ])
大小相等数组之间的运算
arr2 = ([5,6,7,8,9]) arr1+arr2
运行结果:
array([ 6, 8, 10, 12, 14])
例1
arr3 = np.array([[1,2,3],[4,5,6]]) arr4 = np.array([[1,2,3],[4,5,6]]) arr3 + arr4
运行结果:
array([[ 2, 4, 6], [ 8, 10, 12]])
例2
arr3 - arr4
运行结果:
array([[0, 0, 0], [0, 0, 0]])
例3
arr3 * arr4
运行结果:
array([[ 1, 4, 9], [16, 25, 36]])
例4
arr3 / arr4
运行结果:
array([[1., 1., 1.], [1., 1., 1.]])
- 数组的矩阵积