3维数组转2维数组效率(3-Dim to 2-Dim)
程序中必须用到这个功能,我写了一个,如果页超过10000时发现效率不高.通俗的解释一下:
3维:比如一个笔记本有很多页(1维),每页有很多行和很多列数据(2维),但每页的行数不一样,我要做的是把每一页的所有行都取下来,然后放到一页里面去.
2维:笔记本的一页内容,有很多行和很多列数据.
请参考下图.
Labc
[ 本帖最后由 labc 于 2008-1-23 23:20 编辑 ] 还有一种方法,但是必须重新处理2维数组中的空行,还是效率不高.
详见下图. reshape不就可以吗? 我提到的第二种方法就是rashape,但有很多空行需要去掉,几千行可能没什么,如果从好几万行中删除随机分布的空行且不能改变其他行之间的相对位置(也就是说不能通过排序的方法将空行集中的一块儿之后再处理).
Labc
[ 本帖最后由 labc 于 2008-1-24 21:17 编辑 ] 你贴上来的这个程序好像有点问题.既然检查每一行,你的程序运行的结果是,检测到空就停止该页检查?? 没有问题.你说的也没错儿.
循环用来获取每一页的非空的行数,然后将这个行数输出之删除数组元素.vi.你可以自己试一下.
我用的是一楼的方法,当页数有数万页,每一页有不到10行的数据是就会发现效率相当低.
很是郁闷啊.
Labc 又试了一下,上面的程序,在每一页只能检查一次空行,如有多个空行,则空行后的数据会忽略.
我试了10000多页的,由随机数产生的12行5列10100页的三维数组,其中,每一页中随机加了2行空行.
运行起来平均14S.前提是基于数据是在ANSIC中是字符而非数值(如"adfd",非"12.3555"),如果是数值,那么就可以用矩阵处理,速度就快 sorry,可能我没有说清楚,每一页空行全部都在页尾,但行数不确定,但每一页的总行数有限制,肯定不大于行数最多的那一页.
例如:
第一行:11 aa bb cc dd
第二行:22 df fghh rgegre
第三行:空行(所有元素均是空格)
...
三维数组某些列是数字,但所有元素均是用字符串的形式存放的,昨天处理了70000多条,花了将近1个小时.
你说的矩阵的方法似乎可以处理我的问题,希望能够给出更好的处理方法.
Labc
[ 本帖最后由 labc 于 2008-1-25 10:26 编辑 ] :loveliness: :loveliness:
回复 8# 的帖子
今天突然想到我要处理的这个3维数组内部其实是按一定顺序排列的,因此reshape成2维数组后将其中的一列排序,要求非空的行和列的相对位置不能变(类似Excel的扩展排序),这样就可以把空行集中到一块儿后再处理,速度快了n倍,一个小时的任务,不到3秒就完成了,呵呵.Labc
页:
[1]