2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 Матлаб - положить в одну ячейку четыре выходных аргумента
Сообщение11.05.2019, 03:32 


26/09/17
341
Здравствуйте,
Реализована функция, которая имеет четыре выходных аргумента:
Используется синтаксис Matlab M
function [A, B, C, D] = getComboFilter(X)
 

Все аргументы типа double и имеют разный размер (скаляр, два вектора и матрица).
При попытке положить все аргументы в одну ячейку (cell) получаю ошибку:
Используется синтаксис Matlab M
Error using getComboFilter (line 49)
Index exceeds matrix dimensions.
 

Как объединить совокупность выходных аргументов под одним индексом (чтобы потом ссылаться на нее)?

 Профиль  
                  
 
 Re: Матлаб - положить в одну ячейку четыре выходных аргумента
Сообщение11.05.2019, 04:03 
Заслуженный участник
Аватара пользователя


01/09/13
4656
Используется синтаксис Matlab M
res=cell(1,4);[res{:}]=getComboFilter(x);

 Профиль  
                  
 
 Re: Матлаб - положить в одну ячейку четыре выходных аргумента
Сообщение11.05.2019, 13:01 


26/09/17
341
Geen в сообщении #1392276 писал(а):
Используется синтаксис Matlab M
res=cell(1,4);[res{:}]=getComboFilter(x);


Мне нужно заполнить, например, массив ячеек из 38 строк. Пишу:
Используется синтаксис Matlab M
res=cell(38,4);
for i=1:38
      [res{i}{:}]=getComboFilter(X{i});
end
% Получаю ошибку:
Expected one output from a curly brace or dot indexing expression, but there were 0 results.
 

Так тоже пробую:
Используется синтаксис Matlab M
res=cell(38,4);
for i=1:38
      res{i}{:}=getComboFilter(X{i});
end
 

Получаю ошибку, которую указывал первой (см.выше). Не понимаю, что не так...

 Профиль  
                  
 
 Re: Матлаб - положить в одну ячейку четыре выходных аргумента
Сообщение11.05.2019, 13:14 
Заслуженный участник
Аватара пользователя


01/09/13
4656
maximkarimov в сообщении #1392318 писал(а):
Скобки так как показано Вами вообще не принимаются

Это как? Только что проверил (мало ли, вдруг я с катушек съехал) - работает.
Мы действительно про Matlab говорим?

Используется синтаксис Matlab M
res=cell(38,4);res{i}{:}

а это, как бы, вовсе неправильно (в данном контексте).

-- 11.05.2019, 13:18 --

Используется синтаксис Matlab M
[res{i,:}]

вот так надо

 Профиль  
                  
 
 Re: Матлаб - положить в одну ячейку четыре выходных аргумента
Сообщение11.05.2019, 13:22 


26/09/17
341
Geen в сообщении #1392321 писал(а):
maximkarimov в сообщении #1392318 писал(а):
Скобки так как показано Вами вообще не принимаются

Это как? Только что проверил (мало ли, вдруг я с катушек съехал) - работает.
Мы действительно про Matlab говорим?

Используется синтаксис Matlab M
res=cell(38,4);res{i}{:}

а это, как бы, вовсе неправильно (в данном контексте).


Да, про Матлаб. 2017b. Скобки поставил точно так, как Вы указали (правда не сразу). Действитльно, Матлаб их "скушал". Но выдает новую ошибку (см. выше).

-- 11.05.2019, 14:22 --

Geen в сообщении #1392321 писал(а):
maximkarimov в сообщении #1392318 писал(а):
Скобки так как показано Вами вообще не принимаются

Это как? Только что проверил (мало ли, вдруг я с катушек съехал) - работает.
Мы действительно про Matlab говорим?

Используется синтаксис Matlab M
res=cell(38,4);res{i}{:}

а это, как бы, вовсе неправильно (в данном контексте).

-- 11.05.2019, 13:18 --

Используется синтаксис Matlab M
[res{i,:}]

вот так надо

Я за Вами не успеваю! Щас попробую!)
Используется синтаксис Matlab M
res=cell(38,4);
for i=1:38
      [res{i,:}]=getComboFilter(AllReps{i});
end

Снова та же ошибка:
Используется синтаксис Matlab M
Index exceeds matrix dimensions.


На всякий случай показываю выход функции getComboFilter.m некоторого аргумента X:
код: [ скачать ] [ спрятать ]
Используется синтаксис Matlab M
>> [A B C D]=getComboFilter(X)

A =

     1


B =

     1
     1
     1


C =

     0
     0


D =

    26
 

 Профиль  
                  
 
 Re: Матлаб - положить в одну ячейку четыре выходных аргумента
Сообщение11.05.2019, 14:13 
Заслуженный участник
Аватара пользователя


01/09/13
4656
maximkarimov в сообщении #1392323 писал(а):
Снова та же ошибка

Значит это ошибка в "алгоритме" (а не в способе вызова).

 Профиль  
                  
 
 Re: Матлаб - положить в одну ячейку четыре выходных аргумента
Сообщение11.05.2019, 17:00 


26/09/17
341
Geen в сообщении #1392331 писал(а):
maximkarimov в сообщении #1392323 писал(а):
Снова та же ошибка

Значит это ошибка в "алгоритме" (а не в способе вызова).

Поясните что Вы имеете ввиду, плиз.
Кстати, странная штука, все работает при указании индексов руками:
Используется синтаксис Matlab M
res=cell(38,4);
% for i=1:38
    [res{1,:}]=getComboFilter(X{3})
% end
 

Вот, видно, что в первую строку все выходные аргументы "легли" правильным образом (я сверился с 3-й строкой X):
Используется синтаксис Matlab M
res =

  38×4 cell array

    {[       2]}    {4×1 double}    {3×1 double}    {[      76]}
    {0×0 double}    {0×0 double}    {0×0 double}    {0×0 double}
    {0×0 double}    {0×0 double}    {0×0 double}    {0×0 double}
    {0×0 double}    {0×0 double}    {0×0 double}    {0×0 double}
    {0×0 double}    {0×0 double}    {0×0 double}    {0×0 double}
    {0×0 double}    {0×0 double}    {0×0 double}    {0×0 double}
    {0×0 double}    {0×0 double}    {0×0 double}    {0×0 double}
 

Что у меня с циклом не так?

 Профиль  
                  
 
 Re: Матлаб - положить в одну ячейку четыре выходных аргумента
Сообщение11.05.2019, 19:55 
Заслуженный участник
Аватара пользователя


01/09/13
4656
maximkarimov в сообщении #1392360 писал(а):
Что у меня с циклом не так?

С циклом всё так.
Насколько я могу судить, у Вас функция перестаёт работать для какого-то конкретного $X\{i\}$

 Профиль  
                  
 
 Re: Матлаб - положить в одну ячейку четыре выходных аргумента
Сообщение11.05.2019, 20:29 


26/09/17
341
Geen в сообщении #1392389 писал(а):
maximkarimov в сообщении #1392360 писал(а):
Что у меня с циклом не так?

С циклом всё так.
Насколько я могу судить, у Вас функция перестаёт работать для какого-то конкретного $X\{i\}$


Да, причина именно в этом оказалась! Для $X\left\lbrace 7\right\rbrace$ получил ошибку работы функции. Спасибо Вам огромное!

 Профиль  
                  
 
 Re: Матлаб - положить в одну ячейку четыре выходных аргумента
Сообщение11.05.2019, 23:58 


26/09/17
341
Geen в сообщении #1392389 писал(а):
maximkarimov в сообщении #1392360 писал(а):
Что у меня с циклом не так?

С циклом всё так.
Насколько я могу судить, у Вас функция перестаёт работать для какого-то конкретного $X\{i\}$

Функцию поправил, массив заполняется. Но...
Меняю цикл for на parfor:
Используется синтаксис Matlab M
res=cell(38,4);
parfor i=1:38
    [res{i,:}]=getComboFilter(AllReps{i});
end

и получаю новую ошибку:
Используется синтаксис Matlab M
Error using Untitled (line 2)
Expected one output from a curly brace or dot indexing expression, but there were 0 resultsend

В чем причина?

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 10 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group