matlab - matlab中数组行的组合和乘法

标签 matlab performance combinatorics binary-data bitwise-and

我有一个由 01 组成的矩阵 (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) 或一次取 kn 的所有可能组合决定。在本例中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/

相关文章:

Matlab:对有限制的列元素求和

arrays - 删除零然后垂直折叠矩阵

css - 有没有办法将唯一的 scss 文件导出为模块化的 css 文件?

mysql - 是什么导致 MySQL 中带有 InnoDB 表的大量未决读取/写入?我怎样才能阻止他们?

algorithm - 如何按字典顺序枚举无序的整数对

r - 如何使用 R 中的递归创建长度为 n 的所有 2^n 二进制序列的矩阵?

matlab - Matlab向量运算myVector. (':')(':')做什么?

java - 在两个列表中查找额外对象的最佳方法

python - 如何在不构建临时列表的情况下计算唯一排列的数量?

MATLAB:散点图 - 根据位置具有不同形状的点