Как передать значение таблицы в матрицу

Я пытаюсь сделать графический интерфейс в Matlab, который принимает значения в таблице для преобразования ее в матрицу, но идея состоит в том, что пользователь может сначала установить количество строк и столбцов. Панель выглядит вот так Как передать значение таблицы в матрицу
и код кнопки

function pushbutton1_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
rows =str2double(get(handles.edit_rows,'String'));
cols=str2double(get(handles.edit_cols,'String'));
num_elem=cell(rows,cols);
num_elem(:,:) = {"};
set(handles.uitable1,'Data',num_elem)
set(handles.uitable1,'ColumnEditable',true(1,cols))

Но тогда как экспортировать или преобразовать в матрицу, чтобы я мог применять к ней функции?

ОБНОВИТЬ С помощью byetisener я обновил код до функция pushbutton1_Callback (hObject, данные события, дескрипторы)

% hObject    handle to pushbutton1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
filas=str2double(get(handles.edit_fila,'String'));
column=str2double(get(handles.edit_col,'String'));
num_elem=cell(filas,column);
num_elem(:,:) = {''};
set(handles.uitable1,'Data',num_elem)
set(handles.uitable1,'ColumnEditable',true(1,column))
handles.uitable1.Data = cell(filas, column);
matrix = cell2mat(handles.uitable1.Data);
matrix

но это дает пустую матрицу
Как передать значение таблицы в матрицу

Он не принимает значения ячеек, предполагается, что кнопка изменяет размеры и копирует значения одновременно, если нет, то как копировать в другую кнопку после изменения размера матрицы?

Вы хотите правильно преобразовать значения ячеек в число?

medicine_man 02.04.2019 21:55

Да все верно!

riccs_0x 02.04.2019 23:36

Ячейки могут содержать несколько типов данных. Просто получите доступ к ячейке и преобразуйте ее в нужный тип. Судя по вашему коду, содержимое вашей ячейки уже является двойным.

medicine_man 03.04.2019 05:45
stackoverflow.com/questions/55368000/…
medicine_man 03.04.2019 16:04
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
4
92
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Я не уверен, отвечает ли это на ваш вопрос, но вы можете следовать этому подходу.

Прежде всего, если вам интересно, использование точечной записи в MATLAB быстрее, чем методы установки и получения.

Итак, что вы можете сделать, это:

handles.uitable1.Data = cell(rows, cols);

или, конечно, как вариант:

set(handles.uitable1, 'Data', cell(rows,cols));

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

matrix = cell2mat(handles.uitable1.Data);

Если ваша таблица содержит нечисловые значения:

tableData = handles.uitable1.Data;
tableData = [str2double(tableData(:, 1)), cell2mat(tableData(:, 2))];

Надеюсь это поможет. Дайте мне знать, если вы решите свою проблему.

Я обновил вопрос новой информацией, надеюсь, вы сможете попробовать, если не слишком сложно спросить, спасибо!

riccs_0x 04.04.2019 05:47
Ответ принят как подходящий

Есть некоторые проблемы с вашим кодом:

  1. Здесь вы на самом деле не присваиваете значения, вы просто устанавливаете данные uitable в массив пустых ячеек.
num_elem =

  1×2 cell array

    {0×0 char}    {0×0 char}
  1. Если вам когда-нибудь это удастся, ваш код напишет все, что вы хотите, только в первый столбец файла uitable. Потому что вы не перебираете строки. Кнопка добавляет только к первой строке.
  2. Функция cell2mat() не будет работать, если в вашей таблице разные типы данных. Вы можете подумать, что у вас нет разных типов данных, но пустые ячейки — это ячейки типа, а данные, которые вы вводите, — типа double, так что вот оно.

Чтобы решить все это, я переписал для вас функцию обратного вызова. Вы можете напрямую вставить этот код в свой обратный вызов, заменив свой. В конце я должен дать вам матрицу, которую вы хотите, она есть на моем компьютере.

filas  = str2double(handles.edit_fila.String);
column = str2double(handles.edit_col.String);

% This loop looks for an empty row to write new data
for i = 1:length(handles.uitable1.Data) 
   if isempty(handles.uitable1.Data{i,1})
       handles.uitable1.Data(i,1) = {filas};
       handles.uitable1.Data(i,2) = {column};
       break;
   else
       disp('Error occured');
   end
end

% This double for loop check if there are any empty cells 
% if it finds one, it changes it to 0, so all the cells have the same type
for i = 1:length(handles.uitable1.Data) 
    for j = 1:2                         
        if isempty(handles.uitable1.Data{i,j})
            handles.uitable1.Data(i,j) = {0};
        else
            disp('Error occured');
        end
    end
end

matrix = cell2mat(handles.uitable1.Data); % The matrix you want

Просто проверьте, все ли имена переменных одинаковы, и не забудьте принять это в качестве ответа. Надеюсь, поможет.

Другие вопросы по теме