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)
        我不确定你是否打算在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)