我有一个由 0
和 1
组成的矩阵 (89x42),我想将行组合相乘。
例如,对于矩阵
input = [1 0 1
0 0 0
1 1 0];
并且有 2 种组合,我想要输出
output = [0 0 0; % (row1*row2)
1 0 0; % (row1*row3)
0 0 0] % (row2*row3)
要相乘的行由“n 选择 2”(nCk) 或一次取 k
行 n
的所有可能组合决定。在本例中k=2
。
目前我正在使用一个循环,它对于 89C2 行组合运行良好,但是当我使用 89C3 运行它时,运行时间太长。
执行此程序的最有效方法是什么,以便我可以执行 2 种以上的组合?
最佳答案
您可以使用nchoosek
来做到这一点和 element-wise multiplication .
inp = [1 0 1; 0 0 0; 1 1 0]; %Input matrix
C = nchoosek(1:size(inp,1),2); %Number of rows taken 2 at a time
out = inp(C(:,1),:) .* inp(C(:,2),:); %Multiplying those rows to get the desired output
关于matlab - matlab中数组行的组合和乘法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44417404/