【发布时间】:2019-03-08 13:08:15
【问题描述】:
我在 Matlab 中有一个大小为 GxN 的矩阵 index 和一个大小为 MxN 的矩阵 A。
在提出我的问题之前,让我先举个例子。
clear
N=3;
G=2;
M=5;
index=[1 2 3;
13 14 15]; %GxN
A=[1 2 3;
5 6 7;
21 22 23;
1 2 3;
13 14 15]; %MxN
如果A(m,:) 行等于index(g,:),否则我希望您帮助构造一个大小为GxM 和Response(g,m)=1 的矩阵Response,否则为零。
继续上面的例子
Response= [1 0 0 1 0;
0 0 0 0 1]; %GxM
这段代码做我想要的(取自previous question of mine - 只是为了澄清:当前的问题不同)
Response=permute(any(all(bsxfun(@eq, reshape(index.', N, [], G), permute(A, [2 3 4 1])), 1), 2), [3 4 1 2]);
但是,对于我的实际矩阵大小 (N=19, M=500, G=524288),该命令非常慢。我知道我将无法获得极快的速度,但欢迎任何可以改进的地方。
【问题讨论】:
-
我非常怀疑这是否可以改进。您可以通过将代码分成几部分并计时来代替使用 1-liners 来做到这一点
标签: matlab performance matrix rows set-intersection