跨越3D数组的页面增量中位数

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)

Gaurav Garg.
Gaurav Garg. 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:stride:结束,j:stride:结束)=中位数(猫(3,aSubsets {:}),3);
结束
结束
但是,这种方法需要 步^ 2 通过每个通过的文件和大量丢弃的页面数据。所以,我希望只能在单次通过中完成一种方法,消除了外部两个环。

标签

社区寻宝

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

开始狩猎!