2013-05-23 4 views
0

У меня есть следующий цикл, который делает то, что мне нужно:Как я могу векторизовать установку значений индекса одному в Matlab?

> 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] 

это мне нужно в контексте реализации ИНС мульти-класса.

+1

См: http://stackoverflow.com/q/12658682/802117 – Ansari

ответ

1

Рассматривали ли вы использование разреженной матрицы?

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

Если вы действительно должны иметь полную матрицу, вы можете вызвать

Y = full(Y); 
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 
Смежные вопросы