如何提高其循环性能的使用在大型矩阵?

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。我应该做什么?
非常感谢你的帮助。

接受的答案

1月
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;
有一个索引问题在这个版本里,因此我认为结果是不正确的。没有匹配的输入参数,我目前不能调试它。试着解决这个问题通过自己的代码。
2的评论

登录置评。

更多的答案(0)

类别

找到更多的在调整和重塑矩阵帮助中心文件交换

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!