内容简介:以上实例不是使用标准 C 或者 Fortran 顺序,选择的顺序是和数组内存布局一致的,这样做是为了提升访问的效率,默认是行序优先(row-major order,或者说是 C-order)上面的所有都是,显示设置顺序,使用给定顺序,循环数据注意上面的循环都ndarray中的对象都是只读的,不能修改循环内容 eg: 打印迭代对象
import numpy as np dt = np.arange(10).reshape((2,5)) print(dt) for numbers in np.nditer(dt): print(numbers,end=' ') 复制代码
2. 循环转置之后的ndarray对象,记住转置方法transpose或者T
print(dt.T) for numbers in np.nditer(dt.T): print(numbers,end=' ') 复制代码
以上实例不是使用标准 C 或者 Fortran 顺序,选择的顺序是和数组内存布局一致的,这样做是为了提升访问的效率,默认是行序优先(row-major order,或者说是 C-order)
- 下面的按照列方式的访问
dt = np.arange(10).reshape((2,5)) print(dt) # 强制使用C print('显示设置使用C') for members in np.nditer(dt,order='C'): print(members,end=' ') else: print('') # '强制使用F' print('显示设置使用F') for members in np.nditer(dt,order='F'): print(members,end=' ') else: print('') 复制代码
上面的所有都是,显示设置顺序,使用给定顺序,循环数据
dt = np.arange(10).reshape((5,2)) print(dt) print('copy对象使用F') for members in np.nditer(dt.copy(order='F')): print(members,end=' ') else: print('') print('转置之后copy对象使用F') for members in np.nditer(dt.T.copy(order='F')): print(members,end=' ') else: print('') 复制代码
注意上面的循环都ndarray中的对象都是只读的,不能修改循环内容 eg: 打印迭代对象
Traceback (most recent call last): File "numpy.function.py", line 64, in <module> members[...] = members*2 ValueError: assignment destination is read-only 使用参数:op_flags=readwrite或者readonly readwrite: 可修改 readonly: 只读的 复制代码
此外还可以指定nditer类拥有的构造器参数flags,参数:
- c_index 可以跟踪 C 顺序的索引 和order='C'一致
- f_index 可以跟踪 Fortran 顺序的索引 和order='F'一致multi-index每次迭代可以跟踪一种索引类型
- external_loop 给出的值是具有多个值的一维数组,而不是零维数组可以理解为不是ndarray对象中的元素
dt = np.linspace(10,58,24,dtype='int').reshape((4,6)) print(dt) print('打印迭代对象') for members in np.nditer(dt,op_flags=['readwrite']): # print(members[...]) members[...] = members*2 print(members,end=' ') else: print('') print(dt) dt = np.logspace(1,10,20,dtype='int').reshape((5,4)) print(dt) # 遍历所有对象,合并成一个对象 for members in np.nditer(dt,flags=['external_loop'],order='F'): print(members,end=', ') else: print('') 复制代码
如果两个对象是可以广播的,则可以迭代两个对象
dt1 = np.array([[2,3,4],[4,5,6],[6,53,2]]) dt2 = np.arange(3,12).reshape((3,3)) print('两个可迭代对象的元素是:') for x,y in np.nditer([dt1,dt2]): print('{}:{}'.format(x,y),end=' ') print('') 复制代码
下面全是numpy的一些函数,包括以下几大类:
- 修改数组形状 【必须显示的给定形状. eg:(4,5)】
- 翻转数组
- 修改数组维度
- 连接数组
- 分割数组
- 数组元素的添加与删除
np.reshape第三个参数 order='C','F','A' order:'C' -- 按行,'F' -- 按列,'A' -- 原顺序,'k' -- 元素在内存中的出现顺序。
print('函数相关!') # reshape dt = np.asarray([[1,2,3,4],[4,5,6,7],[5,6,7,8]]) print(dt) dt = np.reshape(dt,(2,6)) print(dt) dt = dt.reshape((6,2)) print(dt) 复制代码
flat元素可迭代对象,注意是个对象
print('原始数组') for i in dt: print(i) print('flat元素可迭代后的数组') for members in dt.flat: print(members) 复制代码
flatten,返回一组拷贝,并且对拷贝所做的修改不会影响原始数组,类似于deepcopy,格式如下:ndarray.flatten(order='C') order:'C' -- 按行,'F' -- 按列,'A' -- 原顺序,'K' -- 元素在内存中的出现顺
print('flatten元素可迭代后的数组') for members in dt.flatten(order='C'): print(members) 复制代码
不同风格的展开数组,以 C 风格展开数组和以 F 风格顺序展开的数组
flatten意思是变平,展平
print('使用flatten展平对象') print(dt.flatten()) print(dt.flatten(order='F')) # print(dt.flat()) 复制代码
np.ravel展平对象,这个是数组视图(view,有点类似 C/C++引用reference的意味),修改会影响原始数组。order:'C' -- 按行,'F' -- 按列,'A' -- 原顺序,'K' -- 元素在内存中的出现顺序。该函数接收两个参数:数组和顺序,ravel(dt,order='C')
print('使用ravel展平对象') print(dt.ravel()) print(dt.ravel(order='F')) 复制代码
- 翻转数组
- dt.transpose() 【开始的时候已经使用过】
- dt.T 和上面的函数一致
- rollaxis 向后翻转指定轴
- swapaxes 交换两个轴
print('数组转置') print(dt) print('数组转置T') print(dt.T) print('数组转置transpose') print(dt.transpose()) 复制代码
2019-06-30,太多了,无法一次整理完成 ...待续
数组的rollaxis,交换两个轴
print(np.rollaxis(dt,0,1)) 复制代码
数组函数包括:
- 位运算
- 字符串函数
- 数学函数
- 算数函数
- 统计函数
- 排序,条件刷新函数
- 字节交换
以上所述就是小编给大家介绍的《ndarray可迭代对象,函数,运算》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 迭代器萃取与反向迭代器
- 浅谈python可迭代对象,迭代器
- 可迭代对象,迭代器(对象),生成器(对象)
- 终于把动态规划与策略迭代、值迭代讲清楚了
- 终于把动态规划与策略迭代、值迭代讲清楚了
- 【Java】使用位运算(&)代替取模运算(%)
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
程序员的思维修炼
Andy Hunt / 崔康 / 人民邮电出版社 / 2010-12-10 / 39.00元
本书解释了为什么软件开发是一种精神活动,思考如何解决问题,并就开发人员如何能更好地开发软件进行了评论。书中不仅给出了一些理论上的答案,同时提供了大量实践技术和窍门。 本书供各层次软件开发人员阅读。一起来看看 《程序员的思维修炼》 这本书的介绍吧!