我有一个逻辑乘积为n的1-by-n向量。现在,我需要以行总和等于1的方式将其转换为矩阵m×n。
vector (1-by-8) with sum 4
[0 1 0 0 1 0 1 1]
matrix (4-by-8) with row sum 1
[0 1 0 0 0 0 0 0;
0 0 0 0 1 0 0 0;
0 0 0 0 0 0 1 0;
0 0 0 0 0 0 0 1]
有没有一种数学上有效的方法,无需计算总和,创建一个空矩阵,遍历向量并逐行添加1s?
答案 0 :(得分:3)
我认为在这种情况下,只要您输入了数据,您甚至不需要计算总和。 您可以定义大小为 n 的单位矩阵,然后使用输入向量对其中的所需行进行采样:
I = eye(n);
y = I(x, :) ; % Output Matrix. x is the input vector
答案 1 :(得分:0)
这是另一种使用sparse
的方法:
matrix = full(sparse(1:m, find(vector), 1, m, n));