一、迭代数组
nditer;
1、order
import numpy
def arr_nditer():
arr = numpy.array([[1, 2, 3], [4, 5, 6]])
按照行排序打印
for x in numpy.nditer(arr, order="C"):
print(x, end=" ")
print()
按照列排序打印
for y in numpy.nditer(arr, order='F'):
print(y, end=" ")
print()
默认打印
for z in numpy.nditer(arr):
print(z, end=" ")
print()
arr_nditer()
2、 flags
multi_index:在返回元素的基础上返回每个元素索引
external_loop:遍历数组(配合 order 使用)
def arr_nditer():
arr = numpy.array([[1, 2, 3], [4, 5, 6]])
flags - multi_index 返回数组元素的位置索引
it = numpy.nditer(arr, flags=['multi_index'])
for x in it:
print(x, end=" ")
print(it.multi_index)
print()
默认按行遍历数组,返回一维数组
for y in numpy.nditer(arr, flags=['external_loop']):
print(f'{y}')
for z in numpy.nditer(arr, flags=['external_loop'], order='F'):
print(f'{z}')
arr_nditer()
二、数组操作
1、维度变化
reshape:根据元素个数排列
flat:将数组转化为一维数组迭代器
flatten:将多为数组转化为一维数组,复制数组元素,修改不影响原函数(参数为order)
ravel:将多为数组转化为一维数组,返回的一维数组更改会影响原数组
def arr_flat():
arr = numpy.array([[1, 2, 3], [4, 5, 6]])
返回一维数组迭代器,无参数按行遍历
print(numpy.array(arr.flat))
for i in arr.flat:
print(i, end=' ')
print()
返回一维数组,不影响原数组
arr_flatten = arr.flatten(order='K')
print(arr_flatten) # [1 2 3 4 5 6]
arr_flatten[0] = 100
print(arr_flatten) # [100 2 3 4 5 6]
print(arr) # 没任何改变
print()
返回一维数组,会影响原函数
arr_ravel = arr.ravel(order='K')
print(arr_ravel)
print(arr)
修改ravel后的数组,原数组跟着变化
arr_ravel[0] = -1
print(arr) # 原数组第一个数据被修改为-1
print(arr_ravel)
print()
arr_flat()
2、数组转置
ndarray.transpose() 、ndarray.T (也就是 数组名称.T):二维数组维度(2,4)使用该方法后为(4,2)
def arr_t():
arr = numpy.array([[1, 2, 3], [4, 5, 6]])
print(f"原数组为:")
print(arr)
arr_transpose = arr.transpose() # 无参数有括号
print(f"transpose:")
print(arr_transpose)
print(f"T:")
arr_zz = arr.T # 使用T方法 ,无参数无括号
print(arr_zz)
arr_t()
3、变更数组维度
expand_dims :expand_dims(arr, axis) 在第一个参数输入组要变换的数组,第二个参数添加维度的数值
squeeze:squeeze(arr, axis),在第一个参数的数组中删除指定的轴
def arr_dims():
arr = numpy.array([1, 2, 3, 4])
维度增加
arr1 = numpy.expand_dims(arr, 1)
print(arr1)
print()
arr2 = numpy.arange(1, 7).reshape((2, 3))
print(arr2)
arr3 = numpy.expand_dims(arr2, axis=0)
print(arr3)
arr4 = numpy.expand_dims(arr2, axis=1)
print(arr4)
arr_dims()
def arr_squeeze():arr1 = numpy.arange(1, 7).reshape(1, 6)
print(arr1)
arr2 = numpy.squeeze(arr1, axis=0)
print(arr2)
arr_squeeze()
4、数组连接
hstack 、**vstack :**一个元素可以是元组、列表、数组等,h表示列添加(行相同),v表示行添加(列相同)。
def arr_concat():
生成两个值不同,行相同,列相同的数组
arr1 = numpy.arange(1, 7).reshape(2, 3)
arr2 = numpy.arange(7, 15).reshape(2, 4)
将两个数组开始行连接
arr3 = numpy.hstack((arr1, arr2))
print(arr3)
print()
创建一个数组和arr1的列相同
arr6 = numpy.arange(7, 16).reshape(3, 3)
arr7 = numpy.vstack((arr1, arr6))
print(arr7)
arr_concat()
5、分割数组
hsplit 、vsplit :第一个参数为需要分割的数组,第二个参数为列表形式,表示切割位置,h表示按照列切割,v表示按照行切割。
def arr_aplit():
创建一个四行五列的数组
arr1 = numpy.arange(0, 20).reshape(4, 5)
水平按照第三列左方和第四列左方切割得到三个数组
arr2 = numpy.hsplit(arr1, [2, 3])
遍历取出数组
for i in arr2:
print(i)
print()
创建一个五行四列的数组
arr3 = numpy.arange(0, 20).reshape(5, 4)
水平按照第三行上方和第四行上方切割得到三个数组
arr4 = numpy.vsplit(arr3, [2, 3])
for i in arr4:
print(i)
print()
arr_aplit()
三、数组元素增删改查
1、resize
格式:resize(arr, new_shape),将数组变更为指定的形状,元素不够,从开头遍历继续填充,元素过多,就去掉多余元素。
def arr_resize():
生成元素为七个的数组
arr1 = numpy.arange(0, 7)
变形数组为三行三列的九个元素 数组
arr2 = numpy.resize(arr1, [3, 3])
print(arr2) # 末尾两个位置填充了数组的前两个元素
变形数组为两行两列的四个元素 数组
arr3 = numpy.resize(arr1, [2, 2])
print(arr3) # 只保留了数组前四个元素
arr_resize()
2、append
格式:append(arr, values, axis=None) ;等同于列表的元素添加,values代表需要添加的内容,axis 代表增加方式
例如:np.append(arr,arr,axis)
将第二个arr追加到第一个arr 内
axis 默认等于 None ,返回 一维数组
axis 等于0:第二个arr的列与第一个数组一致,放置到第一个数组下方(列不变,行增加)
axis 等于1:第二个arr的行与第一个数组一致,放置到第一个数组右边(行不变,列增加)
def arr_append():
arr1 = numpy.arange(0, 6).reshape(2, 3)
arr2 = numpy.append(arr1, numpy.array([[10, 20, 30], [20, 30, 40]]), axis=0)
print(arr2)
print()
arr3 = numpy.arange(0, 6).reshape(2, 3)
arr4 = numpy.arange(10, 16).reshape(2, 3)
arr5 = numpy.append(arr3, arr4, axis=1)
print(arr5)
arr_append()
3、insert
格式:insert(arr, obj, values, axis) :等同列表的指定位置添加,同 append,多了obj 参数,表示指定位置。
values的形状会根据axis变化
axis = 0 values形状不变 ,在指定位置上方插入列数相同的数组
axis = 1 values形状变化(倒置),在指定位置左方插入列数等与arr行的的数组
def arr_insert():
arr1 = numpy.arange(6).reshape(2,3)
arr2 = numpy.arange(10, 13).reshape(1,3) # 列相同,行添加
arr3 = numpy.insert(arr1, 1, arr2, axis=0)
print(arr3)
print()
arr2 = numpy.arange(10, 16).reshape(3,2) # 三行两列 会被转置为 两行三列
arr4 = numpy.insert(arr1, 1, arr2, axis=1) # 转置后,行相同,列相加
print(arr4)
arr_insert()
4、delete
格式:delete(arr, obj, axis)
axis =None 将数组转化成一维数组后根据索引删除
axis =0 根据行的索引值删除
axis =1 根据列的索引值删除
def arr_delete():
arr1 = numpy.arange(6).reshape(6)
删除第二列和第四列的值
arr2 = numpy.delete(arr1, [1, 3])
print(arr2)
print()
arr3 = numpy.arange(15).reshape(3, 5)
print(arr3)
arr4 = numpy.delete(arr3, [1, 2], axis=0)
print(arr4)
print()
arr3 = numpy.arange(15).reshape(3, 5)
print(arr3)
arr4 = numpy.delete(arr3, [1, 3], axis=1)
print(arr4)
print()
arr_delete()
5、argwhere
返回数组中非 0 元素的索引,若是多维数组则返回行、列索引组成的索引坐标
def arr_argwhere():
arr1 = numpy.arange(9).reshape(3, 3)
print(arr1)
print()
arr2 = numpy.argwhere(arr1)
print(arr2)
arr_argwhere()
6、unique
格式:unique(arr, return_index=False, return_inverse=False, return_counts=False, axis=None)
def arr_unique():
arr1 = numpy.array([1, 2, 2, 1, 3, 4, 3, 3, 4])
arr2, arr2_index = numpy.unique(arr1, return_index=True)
print(arr2, arr2_index)
print()
arr3, arr3_index = numpy.unique(arr1, return_inverse=True)
print(arr3, arr3_index)
print()
arr4, arr4_count = numpy.unique(arr1, return_counts=True)
print(arr4, arr4_count)
print()
arr5 = numpy.arange(9)
arr6 = numpy.resize(arr5, (3, 4))
print(arr6)
arr7, arr7_index = numpy.unique(arr6, return_inverse=True)
print(arr7)
print(arr7_index)
arr_unique()
四、统计函数
1、amin和amax 最大值和最小值
格式 :amin(arr1, axis=0) 以数组形式返回最大值或最小值
axis 没有,默认找全数组最大值和最小值
axis =0 按照列找,每一列最小值或最大值
axis =1 按照行找,每一行最大值或最小值
2、ptp 最大差值
格式:ptp(arr1,,axis=0)以数组形式返回差值
axis 没有,默认找全数组最大值和最小值的差值
axis =0 按照列找,每一列最小值或最大值的差值
axis =1 按照行找,每一行最大值或最小值的差值
3、median 中位数
格式:median(arr1,,axis=0)以数组形式返回中位数
axis 没有,默认找全数组中位数
axis =0 按照列找,每一列的中位数
axis =1 按照行找,每一行的中位数
奇数就是中间的数,偶数就是中间两个数的平均值
4、mean 算数平均值
格式:mean(arr1,,axis=0)以数组形式返回算数平均值
axis 没有,默认找全数组平均值
axis =0 按照列找,每一列的平均值
axis =1 按照行找,每一行的平均值
5、average 加权平均值
格式:average(arr1,arr2) 返回一维数组的加权平均值;arr1 值数组,arr2是权重数组
6、var 方差
格式:var(arr) ;返回数组的方差;没添加 参数ddof=1 代表总体方差,添加了则是样本方差
7、std 标准差
格式:std(arr) ;返回数组的标准差