2013-06-11 3 views
0

Новичок здесь. Im пытается использовать функцию сигмовидной в распределенном массиве в MATLAB, но им получает следующее сообщение об ошибке:Как экспоненциальные матрицы в распределенных массивах Matlab

>> a = magic(10); 
>> a = distributed(a); 
>> a^2 
Undefined function 'mpower' for input arguments of type 'distributed'. 

Неопределенной функцию «» MPOWER для входных аргументов типа «распределено».

Я сделал некоторые интернет-исследования, но я действительно не нашел ничего полезного.

Но мне нужно сделать экспоненту на распределенном массиве.

Есть ли способ сделать это?

ответ

3

Вы, вероятно, намеревался сделать

b = a.^2; 

вместо

b = a^2; 

Без ., умножение является «умножение матриц» (на самом деле, название mpower предполагает, что буквально экспоненцирование матрицы); с ., это «умножение по элементам». Я полагаю, что матричное умножение не работает (вообще?) Для распределенных матриц - с другой стороны, согласно this link, это фактически происходит неявно без необходимости в распределении.

Это оставляет вопрос: вы намеревались для умножения матрицы или умножения по элементам?

EDIT

Вы указали в комментариях, что причина вашего вопроса в том, что вы оценивали функцию:

function g = sigmoid2(z) 
    g = distributed.zeros(size(z)); 
    %g = arrayfun(@(x) (1/(1+(exp^-(x)))),z); 
    for idx = 1: numel(z) 
    g(idx) = 1/(1+ (exp(1).^-z(idx))); 
    end 
end 

и было интересно, если есть более быстрый способ сделать это. Действительно есть. Вместо цикла по IDX, использовать одинарную матричную операцию

g = 1./(1+exp(-z)); 

в определении функции - это будет во много раз быстрее. Matlab является мощным, но есть много накладных расходов, выполняющих каждую строку - так избегайте циклов, если сможете. Узнайте о векторизации в Matlab (посмотрите его). Распространение не всегда ускоряет работу - это зависит от операции и размера матриц. Используйте инструмент профилирования, чтобы узнать, какая линия занимает больше всего времени - затем используйте эти знания, чтобы сосредоточить свои усилия на ускорении. Удачи!

+0

Tks очень много Флорис !!! –

+0

Это решило вашу проблему? – Floris

+0

Часть этого ... Я пытаюсь использовать нейронную сеть в кластере с использованием распределенного массива Я получаю классы Andrew NG в coursera ... Мое приложение ML занимает очень много времени, чтобы сходиться, поэтому я думаю, что использование распределенный массив для ускорения работы. Я борюсь с этим. Есть ли что-то быстрее, чем Matlab? –