matrix - 有效地将向量解包为二进制矩阵 Octave

标签 matrix vector binary octave

在 Octave 上,我试图以以下格式解压缩向量:

y = [ 1  
      2  
      4  
      1 
      3 ]

我想返回一个维度矩阵( rows(y) x max value(y) ),其中对于每一行,我在原始数字值的列中有一个 1,其他地方都有一个零,即上面的例子
y01 = [ 1 0 0 0
        0 1 0 0
        0 0 0 1
        1 0 0 0
        0 0 1 0 ]

到目前为止我有
y01 = zeros( m, num_labels );
for i = 1:m
    for j = 1:num_labels
        y01(i,j) = (y(i) == j);
    end
end

这有效,但对于更大的矩阵会变慢,并且似乎效率低下,因为即使大多数值没有改变,它也会循环遍历每个值。

我在 another thread 上为 R 找到了这个:
f3 <- function(vec) {
    U <- sort(unique(vec))
    M <- matrix(0, nrow = length(vec), 
          ncol = length(U), 
          dimnames = list(NULL, U))
    M[cbind(seq_len(length(vec)), match(vec, U))] <- 1L
    M
}

但我不知道 R 并且我不确定该解决方案是否/如何转换为 Octave 音程。

感谢您的任何建议!

最佳答案

使用可以像往常一样用于进一步计算的稀疏矩阵(也可以节省大量内存):

y = [1; 2; 4; 1; 3]
y01 = sparse (1:rows (y), y, 1)

如果你真的想要一个完整的矩阵,那么使用“完整”:
full (y01)
ans =
1   0   0   0
0   1   0   0
0   0   0   1
1   0   0   0
0   0   1   0

关于matrix - 有效地将向量解包为二进制矩阵 Octave,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30498824/

相关文章:

c - 在C中的二维矩阵中打印第二对角线下的元素

python - 如何在 Python 中将一串位转换为十六进制字符串?

python - 列向量和矩阵之间的区别

c - c 中的 10k x 10k 矩阵 malloc 好奇心

R - 如果列值与向量项匹配,则从第二个向量中获取值

c++ - 编译器不将 vector 识别为类成员

c - 将数据设置到nodePtr而不覆盖

assembly - 是否可以将二进制可执行文件转换为其原始代码和其他文件?

database - R - 将矩阵中的每个值除以其行/列的最大值

c++ - 用 vector 分而治之的最近点对