matlab - 创建一个零填充的二维数组,其中的元素位于由向量索引的位置

标签 matlab octave vectorization

我正在尝试矢量化以下 MATLAB 操作:

Given a column vector with indexes, I want a matrix with the same number of rows of the column and a fixed number of columns. The matrix is initialized with zeroes and contains ones in the locations specified by the indexes.

这是我已经编写的脚本示例:

y = [1; 3; 2; 1; 3];
m = size(y, 1);

% For loop
yvec = zeros(m, 3);
for i=1:m
    yvec(i, y(i)) = 1;
end

期望的结果是:

yvec =

 1     0     0
 0     0     1
 0     1     0
 1     0     0
 0     0     1

不使用 for 循环是否可以达到相同的结果?我试过这样的事情:

% Vectorization (?)
yvec2 = zeros(m, 3);
yvec2(:, y(:)) = 1;

但它不起作用。

最佳答案

您可以在此处使用两种方法。

方法一:

y = [1; 3; 2; 1; 3];
yvec = zeros(numel(y),3);
yvec(sub2ind(size(yvec),1:numel(y),y'))=1

方法 2(单行):

yvec = bsxfun(@eq, 1:3,y)

关于matlab - 创建一个零填充的二维数组,其中的元素位于由向量索引的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23078287/

相关文章:

r - 通过取消列出然后重新列出将矢量化函数应用于列表

c - 使用 SSE Intrinsics 计算长度和差异的浮点 x、y、z 数组上的循环向量化

matlab - 代码生成和标量结构参数

c - 如何在两个输入图像之间切换幅度和相位信息?

bash - 是否可以使用多个命令行参数运行 matlab 函数?

matlab - 具有多个输入和输出的 fplot 函数

Octave - 霍夫曼代码不起作用 - SIG 的所有元素必须是 [1,N] 范围内的整数

matlab - 更改号码排序/号码顺序

matlab - 从数组的每一行中减去多个向量( super 广播)

matlab - 如何在 MATLAB 中添加二维图以及曲面图或网格图?