numpy是Python中用于科学计算的基础软件包,提供了多为数据组对象,用于对数据进行快速操作,包括数学,逻辑,形状处理,排序,选择,I / O ,离散傅立叶变换,基本线性代数,基本统计运算,随机模拟等等。
numpy包中最核心的类型是ndarray,定义了一个执行矢量算术运算的n维数组,无需编写循环,就能对整个数组进行批量运算。通常情况下,导入numpy,设置别名为np。
import numpy as np
ndarray对象有几个非常明显的特征:
- ndarray对象在创建时有固定的大小,更改ndarray的大小将创建一个新数组并删除原始数组。
- ndarray对象中的元素类型是相同的,
- ndarry有助于对大量数据进行高级数学运算和其他类型的运算
- 越来越多的基于Python的科学和数学软件包都使用NumPy数组。
一,创建多维数组
ndarray是N-Dimension-Array的简称,该对象是一个快速而灵活的大数据集容器,该容器中存储的元素的数据类型都是相同的。
1,使用array()函数创建数组
使用array()函数创建数组,可以使用type()函数查看对象的类型:
a1 = np.array([1,2,3,4,5])
a2 = np.array([[1,2,3,4,5],[6,7,8,9,10]])
通过array()函数,使用列表创建的是一维数组,使用嵌套的列表创建的是多维数组。
2,使用arange()和reshape()函数创建数组
通过arange()函数创建ndarray,产生一维数组,数组的元素是一个序列,默认值start=0,不包括stop,step=1。
numpy.arange([start, ]stop, [step, ]dtype=None)
numpy.arange()的用法示例:
a = np.arange(10) #default start=0, end=10(exclude 10),step=1 # [0 1 2 3 4 5 6 7 8 9] a1 = np.arange(5,10) # start=5, end=10(exclude=10),step=1 # [5 6 7 8 9] a2 = np.arange(5,20,2) # start=5, end=20(exclude 20),step=2 #[ 5 7 9 11 13 15 17 19]
可以使用reshape()函数重塑ndarray()的shape,把12个元素的一维数组转换为3行4列的二维数组:
>>> np.arange(12).reshape(3,4) array([[ 0, 1, 2, 3], [ 4, 5, 6, 7], [ 8, 9, 10, 11]])
3,数组可以转换为列表
ndarray对象的tolist()函数可以把一个数组对象转化为list列表:
>>> np.arange(12).reshape(3,4).tolist()
[[0, 1, 2, 3], [4, 5, 6, 7], [8, 9, 10, 11]]
二,数组的属性
数组对象的属性主要有:
- dtype:描述数组元素的类型
- shape:以tuple表示的数组形状
- ndim:数组的维度
- size:数组中元素的个数
1,dtype对象
dtype是一个特殊的对象,它表示数组元素的类型。
2,shape对象
以元组形式表示一个数组的维度,前三个维度有名称:第一个维度是行,第二个维度是列,第三个维度是高
3,ndim对象
数组各个维度的元素数量
三,索引和切片
ndarray对象的元素可以通过索引或切片来访问和修改,索引基于0。
1,数组的索引
一维数组很简单,从表面上看,一维数组的索引跟Python列表的功能差不多。
arr = np.arange(10)
arr[index]
arr[start:end]
arr[start:end:step]
在一个二维数组中,各索引位置上的元素不再是标量,而是一维数组。
arr2d=np.array([[1,2,3],[4,5,6],[7,8,9]]) >>> arr2d[2] # array([7,8,9]) >>> arr2d[0][2] #3 >>> arr2d[0,2] #3
对于更高维度的数组,一个中括号表示一个维度,索引的使用依此类推。
2,数组的切片
数组切片是原始数组的视图,修改切片中的原始,会直接修改原始数据。数组的切片是Python基本切片的概念从一维到N维的扩展,通过中括号,start,stop和step参数提供给内置函数的slice函数来构造一个Python slice对象,此slice对象被传递给数组来提取数组的一部分。
获取切片的格式是[start:end:step],如果省略start,使用start的默认值0;如果省略end,那么end的默认值是:维度长度-1;如果省略step,使用step的默认值1。通常情况下,数组的切片是[start:end],这就意味着使用step的默认值1。
对于一维数组,数组切片上的任何修改都会直接修改原始数组:
arr = np.arange(10) arr_slice=arr[5:8] arr_slice[1]=111 #arr=array([0,1,2,3,4,5,111,7,8,9]) arr_slice[:]=222 #arr=array([0,1,2,3,4,222,222,222,8,9])
对于二维数组,一个中括号表示一个维度,依此类推。
参考文档: