3 d-matrices逻辑索引而不是循环

5视图(30天)
亲爱的所有社区成员,
我有两个三维矩阵,有所/ AB2 = 1250 x441x451和两个数组,C = 1 x5和D = 1 x1250。
而不是运行循环,我想使用一个向量化代码做以下操作;
如果D (i) < = C (C)的每个值
ABC (i) =有所(我)
其他的
ABC (i) = AB2 (i)。
作为一个归宿,我想五个不同的3 d矩阵(“他们”,“ABC2”…“ABC5”),一个为每个值在C。
为了使用向量化我可以重复3 D矩阵(“有所”和“AB2”)和一维数组(“D”) 5倍使用repmat和重复1 D数组(“C”)使用repelem 1250倍。但我不确定如何进行任何进一步的,甚至如果这是最好的方法。
我如何应用逻辑条件(D < 3 D矩阵C) ?
非常感谢所有的帮助。
亲切的问候
4评论
j·亚历克斯。李
j·亚历克斯。李 2020年8月28日
这是什么意思,第三个维度(0.1:0.1:0.3)吗?为你的目的重要吗?

登录置评。

接受的答案

布鲁诺陈德良
布鲁诺陈德良 2020年8月28日
编辑:布鲁诺陈德良 2020年8月28日
这是代码根据规范中规定的问题,不是语无伦次的例子。
%虚拟测试数据
有所=兰德(250441451);
AB2 =兰德(250441451);
D =兰德(1、大小(有所1));
C =兰特(1、5);
双(k = (D (:) > C (:)。');
AB12 =[有所(:),AB2 (:));
n =大小(AB12, 1);
k =重塑(k,大小(有所,1),1,1,[]);
我=重塑(1:n,大小(有所));
ABC12 = AB12 (i + n * k);
ABC12_cell = num2cell (ABC12 (1 2 3));
[他们,ABC2 ABC3、ABC4 ABC5] =交易(ABC12_cell {:});
5个评论
Askeladden2
Askeladden2 2020年8月28日
非常感谢你的提示里克!

登录置评。

答案(1)

j·亚历克斯。李
j·亚历克斯。李 2020年8月28日
向量化的目的是什么?是想象的速度上涨,或只是一个“原则上”的问题?
原则上布鲁诺的回答是迷人的,但难辨认的是喜欢我的,而且右派低于循环(如果我做正确的事)
%虚拟测试数据
有所=兰德(250441451);
AB2 =兰德(250441451);
C =兰特(1、5);
D =兰德(1、大小(有所1));
% %布鲁诺的回答
抽搐
双(k = (D (:) > C (:)。');
AB12 =[有所(:),AB2 (:));
n =大小(AB12, 1);
k =重塑(k,大小(有所,1),1,1,[]);
我=重塑(1:n,大小(有所));
ABC12 = AB12 (i + n * k);
ABC12_cell = num2cell (ABC12 (1 2 3));
[他们,ABC2 ABC3、ABC4 ABC5] =交易(ABC12_cell {:});
% %循环来达到同样的事情
抽搐
ABCD =细胞(大小(C));
k = 1:长度(C)
ABCD {k} =有所;
掩码= D > C (k);
ABCD {k}(面具,:,)= AB2(面具,:,);
结束
toc
% %之间检查答案的方法
%里克指出,这就是为什么命名变量连续是愚蠢的。
isequal (ABCD{1},他们)
isequal (ABCD {2}, ABC2)
isequal (ABCD {3}, ABC3)
isequal (ABCD {4}, ABC4)
isequal (ABCD {5}, ABC5)
结果是
运行时间是11.659369秒。
运行时间是3.062867秒。
2的评论
Askeladden2
Askeladden2 2020年8月28日
对于这个特定的例子只是速度获得想象力!
我也投票+ 1这个简单和简洁的代码。

登录置评。

类别

找到更多的在循环和条件语句帮助中心文件交换

下载188bet金宝搏


释放

R2020a

社区寻宝

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

开始狩猎!