2016-06-22 3 views
-1

Я новичок в MATLAB. У меня есть функция testnetwork:Использование массивов ячеек и получение слишком большого количества аргументов ввода

function result = TestNetwork(network, input) 
result = input; 
b= [-1 -1 -1 -1 ]; 
     % Iterate over all the couches 
     for i=1:length(network.couches) 
     result = network.activation(matrix_multiplication_same_dimension(network.couches{i} , vertcat (result , b))); 
     end 
end 

и это мой основной сценарий:

% initialis a cell of zeros for example output = zeros_quat(zeros(1, 2)) is %equal to [0 0 0 0] [0 0 0 0] 
output = zeros_quat(zeros(10, size(testset,2))); 
% 
for i = 1:size(testset, 2) 
%testset is a cell of arrays size (81 * 180) 
    output {:,i} = TestNetwork(network, testset{:,i}); 
end 
end 

Я получаю ошибку too many input arguments. Я не знаю, в чем проблема.

+0

Ваша проблема в 'testset {:, i}'. Это создаст список из 180 элементов, разделенных запятыми. Это означает, что вы пытаетесь подавать свою функцию с помощью 180 + 1 входов. Я понятия не имею, что 'testet {:, i}' на самом деле должно быть, поэтому я не могу комментировать то, что вы пытаетесь сделать. Кроме того, 'output {:, i}' даст вам ошибку после исправления проблемы 'testet {:, i}. – rayryeng

+0

@rayryeng точно я хочу загрузить 181, потому что couche.netwok является матрицей и matrix_multiplication_same_dimension умножить 2 матрицы –

+0

..... Э-э, что? – rayryeng

ответ

0

Эта линия проблема:

output {:,i} = TestNetwork(network, testset{:,i}); 

При разыменовываются массив клеток testset с помощью фигурных скобок {} с несколькими записями, он принимает отдельные ячейки массива клеток и возвращает все из них, как отдельные аргументы:

a = { [ 1 2], [3 4] }; 
a{1} 
ans = 
    1  2 

a{1,:} 
ans = 
    1  2 
ans = 
    3  4 

Примечание два экземпляра ans во второй оценке. Я подозреваю, что то, что вы действительно хотите, является ссылкой на одну ячейку по обе стороны от уравнения:

output{i} = TestNetwork(network, testset{i}); 
+0

result = network.activation (matrix_multiplication_same_dimension (network.couches {i}, vertcat (результат, b))); –

+0

result = network.activation (matrix_multiplication_same_dimension (network.couches {i}, vertcat (результат, b))); network.couche - это массив ячеек, и мне нужно умножить 2 массива ячеек, например умножение на 2 матрицы, поэтому мне нужно загрузить столбец по столбцу, а не элемент по элементу –

+0

функция matrix_multiplication_same_dimension умножить 2 матрицы массива (для кватернионов) –