python numpy2

一、迭代数组

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、分割数组

hsplitvsplit :第一个参数为需要分割的数组,第二个参数为列表形式,表示切割位置,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) ;返回数组的标准差

相关推荐
Mr. zhihao4 分钟前
装饰器模式详解:动态扩展对象功能的优雅解决方案
java·开发语言·装饰器模式
zyhomepage5 分钟前
科技的成就(六十四)
开发语言·人工智能·科技·算法·内容运营
Ethan Wilson11 分钟前
C++/QT可用的websocket库
开发语言·c++·websocket
小宇1 小时前
The valid characters are defined in RFC 7230 and RFC 3986
java·开发语言·后端·tomcat
尘浮生1 小时前
Java项目实战II基于Spring Boot的美食烹饪互动平台的设计与实现(开发文档+数据库+源码)
java·开发语言·数据库·spring boot·微信小程序·小程序·美食
杨荧1 小时前
【JAVA毕业设计】基于Vue和SpringBoot的校园美食分享平台
java·开发语言·前端·vue.js·spring boot·java-ee·美食
铁盒薄荷糖1 小时前
【Pytorch】Pytorch的安装
人工智能·pytorch·python
yyfhq1 小时前
rescorediff
python·深度学习·机器学习
糊涂君-Q1 小时前
Python小白学习教程从入门到入坑------第十九课 异常模块与包【下】(语法基础)
开发语言·python·学习·程序人生·改行学it
爱编程的小新☆1 小时前
Java篇图书管理系统
java·开发语言·学习