如何在Matlab中将索引值设置为1?

时间:2013-05-23 21:39:17

标签: matlab vectorization

我有以下循环可以满足我的需求:

> whos Y
  Name       Size               Bytes  Class     Attributes

   Y         10x5000            400000  double              

> whos y
   Name         Size            Bytes  Class     Attributes

   y         5000x1             40000  double              

Y = zeros(K,m);
for i=1:m
    Y(y(i),i)=1;
end

我想对它进行矢量化,我尝试过没有成功,例如

Y = zeros(K,m);
Y(y,:)=1;

这个想法是得到一个矢量:

y = [9, 8, 7, .. etc]

并将其转换为:

Y = [[0 0 0 0 0 0 0 0 1 0]' [0 0 0 0 0 0 0 1 0 0]' [0 0 0 0 0 0 1 0 0 0]' ... etc]

我需要在多类ANN实现的上下文中。

2 个答案:

答案 0 :(得分:1)

这是您可以使用的一种解决方案。这是您可以优化的起点

k = 10;
n = 20;
y = randi(k, 1, n);

columns = 1:n;
offsets = k*(columns-1);
indices = offsets + y;

Y = zeros(k, n);
Y(indices) = 1

答案 1 :(得分:1)

您是否考虑过使用稀疏矩阵?

n=numel(y);
Y = sparse( y, 1:n, 1, n, n );

如果你真的必须有完整的矩阵,你可以打电话

Y = full(Y);