如何提高其循环性能的使用在大型矩阵?
3视图(30天)
显示旧的评论
亲爱的所有,
我有四个矩阵NewZ (1 x20),经度(1000 (x1)、纬度(1000 x1)和depthgrid (1000 x1000)。注意,depthgrid代表的深度空间网格(经度、纬度)。还请注意,B是1000 x 1000 x 20矩阵对应于空间网格的SPL值在20个不同的深度。
我需要检查每一个点的depthgrid为了计算SPL的均值点沿着经度x纬度点低于特定深度(NewZ矩阵)。
我为此写道:这是一个代码
= 0(大小(depthgrid));
为i = 1:长度(经度);
为j = 1:长度(纬度);
FINDLOWERS =找到(-NewZ < depthgrid (i, j));
BMEDIA =意味着(B (:,: min (FINDLOWERS):马克斯(FINDLOWERS)), 3);%计算一只猫的均值矩阵
(i, j) = (BMEDIA (i, j));%点到矩阵
结束
结束
然而,这工作我花了六个小时计算。所以,我的问题是:是否有可能更快地执行一个检查吗?两个连续的周期非常uneficient。我应该做什么?
非常感谢你的帮助。
0评论
接受的答案
1月
2021年9月30日
编辑:1月
2021年9月30日
你为什么计算完成BMEDIA矩阵的均值,如果使用元素的输出(i, j) ?
= 0(大小(depthgrid));
为i = 1:长度(经度)
为j = 1:长度(纬度)
F =找到(-NewZ < depthgrid (i, j));
(i, j) =意味着(B (i, j,最小(F):最大(F)), 3);
结束
结束
意思是()不是真的有效。试试这个:
= 0(大小(depthgrid));
为i = 1:长度(经度)
为j = 1:长度(纬度)
F =找到(-NewZ < depthgrid (i, j));
F1 = F (1);
F2 = F(元素个数(F));
一笔(i, j) = (B (i, j, F1, F2), 3) / (F2 - F1 + 1);
结束
结束
另外:
= 0(大小(depthgrid));
N = 0(大小(depthgrid));
BB =重塑(BB,[],大小(B, 3));
nNewZ = -NewZ;
为k = 1:元素个数(NewZ) - 1
指数= (nNewZ (k) < = depthgrid < nNewZ (k + 1));
(指数)=(索引)+ BB(指数(k);
N(指数)= N(指数)+ 1;
结束
一个= / N;
有一个索引问题在这个版本里,因此我认为结果是不正确的。没有匹配的输入参数,我目前不能调试它。试着解决这个问题通过自己的代码。