三维阵列页面间的增量中值

1视图(过去30天)
马特·J
马特·J 2021年1月25日
编辑: 马特·J 2021年1月28日
我正在计算页面间的中位数,
B =值(3)
除了a太大,无法将其整个和页面保存在内存中 (:: k) 占用磁盘上的单独文件( 编辑: 我没有办法阅读页面的严格子块 ).有没有一种算法,理想情况下还有一个Matlab实现,通过循环连续的页面来递增地计算B (:: k) ,还是大块的页面?
4评论
马特·J
马特·J 2021年1月28日
这听起来好像需要将每个页面表示为一个数据存储。我没有办法加载页面的子部分,例如,单独的行,所以我不知道如何建立这样的数据存储。

登录评论。

答复(2)

夫·加格
夫·加格 2021年1月28日
嗨,马特,
您可以通过将每一列转换为高列,然后计算其中值来计算每一列的中值。您可以对每一列重复该步骤(在您的情况下)。
T =高((:1))
m=中值(T);
回答=收集(m);
或者,您也可以将数组转换为分布式数组,然后计算中值(尽管前一种解决方案可能更有用)。
一个= 0 (100000 3);
D=分布(A);
e=中值(D);
1评论
马特·J
马特·J 2021年1月28日
嗨Gaurav,
我们的思想是求 :一个(i, j) 对于每个固定对 (i, j) . 您的建议似乎需要将3D数组转换为2D数组,以某种方式进行排列和重塑,使页面现在成为列。但我不知道你会怎么做到,因为,正如我所说的,页面, (:: k) 不能在RAM中同时保存,也不能在磁盘上连续使用。

登录评论。


马特·J
马特·J 2021年1月28日
编辑:马特·J 2021年1月28日
一种解决方案是将这些页面大量删除并连接起来,如下所示。如果我选择谦虚 ,可以同时将抽取的页面存储在RAM中,并取其中值,
步= 5;
Asubsets =细胞(1、numPages);
我= 1:跨步
j=1:步幅
k = 1: numPages
temp =阅读(___);% k阅读页面
Asubsets {k} = temp(我:步:结束,j:步:结束);
结束
B(i:步幅:结束,j:步幅:结束)=中位数(cat(3,Asubsets{:}),3);
结束
结束
然而,这种方法需要 步^ 2 在每次传递中传递文件和大量丢弃的页面数据。所以,我希望有一种方法可以在一次通过中完成,消除外部的两个循环。

标签

社区寻宝

在MATLAB中心找到宝藏,并发现社区如何可以帮助你!

开始打猎吧!