上一篇学习了数组的创建以及基本性质(数据类型、形状),今天学习数组的基本操作
1.自动创建数组
1.1特殊数组的自动创建
特殊数组包括:全零矩阵,全壹矩阵,指定同一值矩阵,以及与指定矩阵相同性质的特殊矩阵
函数 | 含义 | 例子(代码) |
zeros(形状,数据类型) | 全零数组 | array([0,0,0,0]) |
ones(形状,np.类型) | 全一数组 | array([1,1,1,1]) |
empty(形状,np.类型) | 空矩阵(未初始化) | array([[520,0,520], [0, 0,-214]]) |
full(形状,np.值) | 初始化为同一值 | array([5,5,5,5]) |
zeros_like(a) ones_like(a) empty_like(a) full_like(a) | 创建与数组a同样形状和数据类型的数组,等价于zeros_like(a.shape,a.dtype) | array([[0,0,0], [0,0,0]]) |
1.2 从字节序列或者文件创建
字符串是只读的,不可修改。特别注意数据类型的影响,本文只着重于通过函数创建
函数 | 含义 |
fromstring(s,dtype=np.类型) | 从字符串s创建数组 |
fromfunction(函数名,形状) | 从指定函数创建数组 |
在使用fromfunction之前要先定义函数,用def来定义。此处可以创建多维数组,注意形状属性为( ,),且0轴和1轴都是从0开始编号
例如:
一维数组:
import numpy as np
#定义函数 除以4的余数加1
def func(i):
return i%4+1
np.fromfunction(func,(10,))
输出为:array([1.,2.,3.,4.,1.,2.,3.,4.,1.,2.])
2维数组:
import numpy as np
#9*9乘法表
def func1(i,j):
return (i+1)*(j+1)
np.fromfunction(func1,(9,9))
输出如下:
2.对数组中元素进行操作
对元素的操作,主要包括存取、修改。
一维数组:a[始:终:间隔]
二维数组:a[0轴,1轴],a[:,2] 所有行第三列
2.1 使用切片存取修改
使用切片存取或者修改时,与原数组共用内存,因此修改一个则原数组也修改
import numpy as np
a=np.arange(10)
a #从0开始 array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
a[5] #第6个元素 5
a[3:5] #第4个和第5个,含头不含尾 array([3, 4])
a[:5] #从0开始到底5个 array([0, 1, 2, 3, 4])
a[3:] #从第4个开始 array([3, 4, 5, 6, 7, 8, 9])
a[1::2] #[始:终:间隔] array([1, 3, 5, 7, 9])
a[::-1] #负间隔表示反序 array([9, 8, 7, 6, 5, 4, 3, 2, 1, 0])
a[2:4]=100,101
a #修改元素 array([ 0, 1, 100, 101, 4, 5, 6, 7, 8, 9])
#赋值之后数组与原数组共享内存,同时更新
b=a[1:4]
b[0]=-10
a #array([ 0, -10, 100, 101, 4, 5, 6, 7, 8, 9])
2.2 使用整数列表、整数数组等存取
得到的数组与原数组不共享数据
a[[2,3]] #整数列表(起始为0) array([100, 101])
b=a[[2,3]]
b[0]=2
a #a的第1个元素并不改变 array([ 0, -10, 100, 101, 4, 5, 6, 7, 8, 9])
a[np.array([2,3])] #整数数组 array([100, 101])
结构数组和内存结构等就暂时不学习,需要用到再补充。