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)