向量到行总和为1的矩阵

时间:2018-09-29 10:46:48

标签: matlab matrix vector

我有一个逻辑乘积为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?

2 个答案:

答案 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));