NumPy-中的多维迭代器.pdf
《NumPy-中的多维迭代器.pdf》由会员分享,可在线阅读,更多相关《NumPy-中的多维迭代器.pdf(31页珍藏版)》请在咨信网上搜索。
1、NumPy中的多维迭代器中的多维迭代器代码之美第19章江涌NumPy是Python的一个可选安装包,提供了一个功能强大的N维数组对象。NumPy提供了多种数组的数学化操作与结构化操作,使得Python能够很好地开发一些关键的并且要求运行速度很快的工程代码和科学代码。NumPy中通过切片(slicing)的概念来实现快速结构化操作。记法为start:stop:stride,例如im2=im8:2:-1,9:1:-3。按照slicing方式选取的新影像将与原始影像共享数据,不会生成一个副本,减少计算机资源的消耗。关键挑战经常需要遍历数组中的元素,在遍历中进行所需要的操作。简单想法:用单层for循环
2、处理一维,双层for循环处理两维但当维数N是一个任意整数,怎么办?递归:递归条件(recursive case),基线条件(base case)Copy_ND(a,b,N)/将N维数组b复制到N维数组a递归实现:if(N=0)copy memory from b to areturnfor i=0 to size of first dimension of a and bptr_b=biCopy_ND(ptr_a,ptr_b,N-1)ai=ptr_a递归算法在每次迭代中进行函数调用,容易产生速度很慢的代码;许多算法需要保存中间值用于后续的递归调用(求最大值),这些值将被作为递归调用的参数传递,
3、很难提供用于递归解决方案的简化工具。因此,NumPy使用迭代来完成。迭代器(Iterator)是一种简化这些算法的抽象,包含了单个循环内遍历数组中所有元素的思想。迭代器的两个基本方法:hasnext 是否还有下一个元素;next 返回下一个元素。for x in iterobj:process(x)数组的内存模型邻接型数组:在内存中连续存放。一个二维4*5数组p=1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20from numpy import*pp=array(p)p1=pp1:3,1:412345678910111213141516171
4、819201234567891011121314151617181920跨度数组中某一维的跨度(stride):沿着这一维,或者说数轴,从数组中的一个元素移动到下一个元素,需要跳过多少字节。(跨度可以是负数)pp:第一维跨度4*5,第二维跨度4;p1:第一维跨度4*5,第二维跨度4.迭代器设计迭代器循环伪码:set up iterator(including pointing the current value to the first value in the array)while iterator not done:process the current valuepoint the c
5、urrent value to the next value设计分为三部分:1.Moving to the next value2.Termination3.Setup递进确定按怎样的顺序来提取元素NumPy中通过使用一组数字来模拟简单计数而实现。用N元整数组来表示当前位置,数组的形状(0,0)表示数组第一个元素,表示数组的最后一个元素。下一个元素的位置是将最后一个数字加1来得到。若第i个数字到达了,那么这个数字将被设置为0,而第(i-1)个数字将增1。比如对于数组来说12(1,1,.,1)Nnnn12.Nnnnin(0,0,0)(0,0,1)(0,0,2)(0,1,0)(0,1,1)(0,1
6、,2)(1,0,0).(2,1,1)(2,1,2)3 2 3 假设data是指向数组起始位置的指针,counterN是计数器数组,stridesN是跨度值数组,那么下面的运算将把dataptr设置为指向数组当前值的第一个字节:dataptr=(char*)data;for(i=0;ind_m1;i=0;i-)if(it-coordsi dims_m1i)it-coordsi+;it-dataptr+=it-stridesi;break;else it-coordsi=0;it-dataptr-=it-backstridesi;使用while语句done=0;i=it-nd_ml;while(!
7、done|i=0)/*&*/if(it-coordsi dims_m1i)it-coordsi+;it-dataptr+=it-stridesi;done=1;else it-coordsi=0;it-dataptr-=it-backstridesi;i-;NumPy迭代器的结构typedef struct PyObject_HEADint nd_m1;npy_intp index,size;npy_intp coordsNPY_MAXDIMS;npy_intp dims_m1NPY_MAXDIMS;npy_intp stridesNPY_MAXDIMS;npy_intp backstride
8、sNPY_MAXDIMS;npy_intp factorsNPY_MAXDIMS;PyArrayObject*ao;char*dataptr;npy_bool contiguous;PyArrayIterObject;指向构建迭代器的原始数组的指针判断是否邻接数组接口在NumPy中it=PyArray_IterNew(ao)-构建数组ao的迭代器PyArray_ITER_NOTDONE(it)-判断迭代是否结束PyArray_ITER_NEXT(it)-实现迭代的下一个位置PyArray_ITER_DATA(it)-得到指向当前值第一个字节的指针示例:计算N维数组中的最大值。(假设数组ao是d
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- NumPy 中的 多维 迭代器
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【w****g】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【w****g】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。