我有索引的矢量.如何在每行的给定索引处设置一个?

Moł*_*łot 5 arrays matlab octave

我有一个y整数值从1到10 的向量:

octave> size(y)
ans =

   5000      1
Run Code Online (Sandbox Code Playgroud)

我创建了zeros数组y1:

octave> size(y1)
ans =

   5000     10
Run Code Online (Sandbox Code Playgroud)

我需要在元素1中的每一行中设置y2索引等于value y.所以在第一行,当我有:

octave> y(1)
ans =  10
Run Code Online (Sandbox Code Playgroud)

我需要:

octave> y1(1,:)
ans =

   0   0   0   0   0   0   0   0   0   1
Run Code Online (Sandbox Code Playgroud)

[w, y] = max(y2, [], 2);在我的代码的其他地方有一些反转.

有一个简单的单行技巧吗?如果没有,我如何同时迭代两个数组?

小智 7

你可以使用这个技巧

y1 = eye(10)(y,:);
Run Code Online (Sandbox Code Playgroud)

或者它是两步版本

y1 = eye(10);
y1 = y1(y,:);
Run Code Online (Sandbox Code Playgroud)

说明

在第一步中,您将创建一个单位矩阵

  >> y1 = eye(10)    

    y1 =    

 Diagonal Matrix

       1   0   0   0   0   0   0   0   0   0
       0   1   0   0   0   0   0   0   0   0
       0   0   1   0   0   0   0   0   0   0
       0   0   0   1   0   0   0   0   0   0
       0   0   0   0   1   0   0   0   0   0
       0   0   0   0   0   1   0   0   0   0
       0   0   0   0   0   0   1   0   0   0
       0   0   0   0   0   0   0   1   0   0
       0   0   0   0   0   0   0   0   1   0
       0   0   0   0   0   0   0   0   0   1
Run Code Online (Sandbox Code Playgroud)

在第二步中,您将y在indentity矩阵中用作索引.这一步从字面矩阵中复制行并创建所需的矩阵.

>> y = [1,1,2,2,5,10,10];
>> y1 = y1(y,:)
y1 =

   1   0   0   0   0   0   0   0   0   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
   0   0   0   0   1   0   0   0   0   0
   0   0   0   0   0   0   0   0   0   1
   0   0   0   0   0   0   0   0   0   1
Run Code Online (Sandbox Code Playgroud)


buz*_*jwa 2

我不确定你是否打算在y1或中执行此操作y2。无论如何,请尝试以下操作(y1例如):

y = randi(10,5000,1);
y1 = zeros(size(y,1), 10);
y1(sub2ind(size(y1), (1:size(y1,1))', y)) = 1;
Run Code Online (Sandbox Code Playgroud)