【发布时间】:2018-08-31 15:31:57
【问题描述】:
我有一个向量 y = [1; 1; 2; 3] 和一个矩阵 Y = zeros(4, 3)。
我需要将Y 中与向量y 的值相对应的列设置为1。即
Y = [1, 0, 0; 1, 0, 0; 0, 1, 0; 0, 0, 1]
Y(y) 或 Y(:, y) 没有给我我需要的结果!
知道如何实现这一目标吗?
【问题讨论】:
标签: matrix vector indexing octave
我有一个向量 y = [1; 1; 2; 3] 和一个矩阵 Y = zeros(4, 3)。
我需要将Y 中与向量y 的值相对应的列设置为1。即
Y = [1, 0, 0; 1, 0, 0; 0, 1, 0; 0, 0, 1]
Y(y) 或 Y(:, y) 没有给我我需要的结果!
知道如何实现这一目标吗?
【问题讨论】:
标签: matrix vector indexing octave
您需要将这些列索引转换为线性索引。你这样做:
octave:1> A = zeros (4, 3);
octave:2> c_sub = [1, 1, 2, 3];
octave:3> ind = sub2ind (size (A), 1:rows(A), c_sub)
ind =
1 2 7 12
octave:4> A(ind) = 1
A =
1 0 0
1 0 0
0 1 0
0 0 1
但是,如果您的矩阵如此稀疏,请务必创建一个适当的稀疏矩阵:
octave:4> sparse (1:4, c_sub, 1, 4, 3)
ans =
Compressed Column Sparse (rows = 4, cols = 3, nnz = 4 [33%])
(1, 1) -> 1
(2, 1) -> 1
(3, 2) -> 1
(4, 3) -> 1
也许考虑使用逻辑矩阵(使用false 代替zeros 和true 代替1。
【讨论】:
c_sub 来自哪里?我有error: 'c_sub' undefined near line 1 column 37!
c_sub 是您的问题中的y.',carandraugs 中的A 是您的Y