内容简介:以上实例不是使用标准 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】使用位运算(&)代替取模运算(%)
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Pro JavaScript Techniques
John Resig / Apress / 2006-12-13 / USD 44.99
Pro JavaScript Techniques is the ultimate JavaScript book for the modern web developer. It provides everything you need to know about modern JavaScript, and shows what JavaScript can do for your web s......一起来看看 《Pro JavaScript Techniques》 这本书的介绍吧!