Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 如何将表的值传递给矩阵_Matlab_User Interface_Linear Algebra - Fatal编程技术网

Matlab 如何将表的值传递给矩阵

Matlab 如何将表的值传递给矩阵,matlab,user-interface,linear-algebra,Matlab,User Interface,Linear Algebra,我正试图在matlab中制作一个GUI,它接受表格中的值,并将其转换为矩阵,但想法是用户可以先设置行数和列数。 面板看起来像这样 按钮的代码是 function pushbutton1_Callback(hObject, eventdata, handles) % hObject handle to pushbutton1 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % ha

我正试图在matlab中制作一个GUI,它接受表格中的值,并将其转换为矩阵,但想法是用户可以先设置行数和列数。
面板看起来像这样
按钮的代码是

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\u回调(hObject、eventdata、句柄)

但这是一个空矩阵


它不是获取单元格的值,假设按钮同时调整大小并复制值,如果不是,那么矩阵调整大小后如何复制另一个按钮?

我不确定这是否回答了您的问题,但您可以采用这种方法

首先,如果您感兴趣,在MATLAB中使用点表示法比setter和getter方法更快

因此,您可以做的是:

handles.uitable1.Data=单元格(行、列);
或者,当然,或者:

set(handles.uitable1,'Data',单元格(行,列));
如果要将uitable中的数据转换为矩阵,可以使用:

matrix=cell2mat(handles.uitable1.Data);
如果表格包含非数值:

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

希望这有帮助。如果您解决了问题,请告诉我。

我不确定这是否回答了您的问题,但您可以采用这种方法

首先,如果您感兴趣,在MATLAB中使用点表示法比setter和getter方法更快

因此,您可以做的是:

handles.uitable1.Data=单元格(行、列);
或者,当然,或者:

set(handles.uitable1,'Data',单元格(行,列));
如果要将uitable中的数据转换为矩阵,可以使用:

matrix=cell2mat(handles.uitable1.Data);
如果表格包含非数值:

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

希望这有帮助。如果您解决了问题,请告诉我。

您的代码存在一些问题:

  • 这里并没有真正赋值,只是将uitable的数据设置为一个空单元格数组
  • num\u elem=
    1×2单元阵列
    {0×0字符}{0×0字符}
    
  • 如果您成功了,您的代码将只在uitable的第一列编写您想要的所有内容。因为您没有遍历行。该按钮仅添加到第一行
  • 如果表中有不同的数据类型,则cell2mat()函数将不起作用。您可能认为您没有不同的数据类型,但是空单元格是类型cell,您输入的数据是类型double,所以它就是这样 为了解决所有这些问题,我为您重写了一个回调函数。您可以直接将此代码粘贴到回调中,替换您的回调。最后我应该给你你想要的矩阵,它在我的电脑里

    filas=str2double(handles.edit\u fila.String);
    column=str2double(handles.edit\u col.String);
    %此循环查找空行以写入新数据
    对于i=1:长度(handles.uitable1.Data)
    if isempty(handles.uitable1.Data{i,1})
    handles.uitable1.Data(i,1)={filas};
    handles.uitable1.Data(i,2)={column};
    打破
    其他的
    disp(“发生错误”);
    结束
    结束
    %此双for循环检查是否存在任何空单元格
    %如果找到一个,它会将其更改为0,因此所有单元格都具有相同的类型
    对于i=1:长度(handles.uitable1.Data)
    对于j=1:2
    if为空(handles.uitable1.Data{i,j})
    handles.uitable1.Data(i,j)={0};
    其他的
    disp(“发生错误”);
    结束
    结束
    结束
    矩阵=cell2mat(handles.uitable1.Data);%你想要的矩阵
    

    只要检查所有变量名是否相同,不要忘记接受is作为答案。希望能有帮助

    您的代码存在一些问题:

  • 这里并没有真正赋值,只是将uitable的数据设置为一个空单元格数组
  • num\u elem=
    1×2单元阵列
    {0×0字符}{0×0字符}
    
  • 如果您成功了,您的代码将只在uitable的第一列编写您想要的所有内容。因为您没有遍历行。该按钮仅添加到第一行
  • 如果表中有不同的数据类型,则cell2mat()函数将不起作用。您可能认为您没有不同的数据类型,但是空单元格是类型cell,您输入的数据是类型double,所以它就是这样 为了解决所有这些问题,我为您重写了一个回调函数。您可以直接将此代码粘贴到回调中,替换您的回调。最后我应该给你你想要的矩阵,它在我的电脑里

    filas=str2double(handles.edit\u fila.String);
    column=str2double(handles.edit\u col.String);
    %此循环查找空行以写入新数据
    对于i=1:长度(handles.uitable1.Data)
    if isempty(handles.uitable1.Data{i,1})
    handles.uitable1.Data(i,1)={filas};
    handles.uitable1.Data(i,2)={column};
    打破
    其他的
    disp(“发生错误”);
    结束
    结束
    %此双for循环检查是否存在任何空单元格
    %如果找到一个,它会将其更改为0,因此所有单元格都具有相同的类型
    对于i=1:长度(handles.uitable1.Data)
    对于j=1:2
    if为空(handles.uitable1.Data{i,j})
    handles.uitable1.Data(i,j)={0};
    其他的
    disp(“发生错误”);
    结束
    结束
    结束
    矩阵=cell2mat(handles.uitable1.Data);%你想要的矩阵
    
    只要检查所有变量名是否相同,不要忘记接受is作为答案。希望能有帮助

    你想改变信仰
    % 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