Indexing 批量设置矩阵中的值
问题是基于向量中包含的数据在矩阵中批量更改值 假设我有一个由零组成的矩阵5x4Indexing 批量设置矩阵中的值,indexing,octave,Indexing,Octave,问题是基于向量中包含的数据在矩阵中批量更改值 假设我有一个由零组成的矩阵5x4 octave> Z = zeros(5,4) Z = 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 和一个列向量,其长度等于Z中的行数,即5。向量y中的行对应于矩阵Z中的行 octave> y = [1; 3; 2; 1; 3] y = 1 3 2
octave> Z = zeros(5,4)
Z =
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
和一个列向量,其长度等于Z中的行数,即5。向量y中的行对应于矩阵Z中的行
octave> y = [1; 3; 2; 1; 3]
y =
1
3
2
1
3
我想要的是在矩阵Z中的列中设置1,这些列的索引作为值包含在向量y的对应行中。也就是说,我想要这样的Z矩阵:
Z = # y =
1 0 0 0 # <-- 1 st column
0 0 1 0 # <-- 3 rd column
0 1 0 0 # <-- 2 nd column
1 0 0 0 # <-- 1 st column
0 0 1 0 # <-- 3 rd column
Z=#y=
1 0 0 0 0#由于Octave具有自动广播功能(您需要Octave 3.6.0或更高版本),我认为最简单的方法是使用它进行比较。这是怎么做的
octave> 1:5 == [1 3 2 1 3]'
ans =
1 0 0 0 0
0 0 1 0 0
0 1 0 0 0
1 0 0 0 0
0 0 1 0 0
广播在上有解释,但Scipy也有一个很好的图片。由于Octave有自动广播功能(您需要Octave 3.6.0或更高版本),我认为最简单的方法是使用它进行比较。这是怎么做的
octave> 1:5 == [1 3 2 1 3]'
ans =
1 0 0 0 0
0 0 1 0 0
0 1 0 0 0
1 0 0 0 0
0 0 1 0 0
广播在上有说明,但Scipy也有一个很好的解决方案,它有漂亮的图片。找到了另一个不使用广播的解决方案。它也不需要零矩阵
octave> y = [1; 3; 2; 1; 3]
octave> eye(5)(y,:)
ans =
1 0 0 0 0
0 0 1 0 0
0 1 0 0 0
1 0 0 0 0
0 0 1 0 0
相关阅读如下:
找到了另一个不使用广播的解决方案。它也不需要零矩阵
octave> y = [1; 3; 2; 1; 3]
octave> eye(5)(y,:)
ans =
1 0 0 0 0
0 0 1 0 0
0 1 0 0 0
1 0 0 0 0
0 0 1 0 0
相关阅读如下: