多维数组阻止在Matlab变量查看器

时间:2015-08-17 03:37:32

标签: matlab

我有一个名为temp的表,在工作区中我可以看到它是一个5777x50表。但是,当我双击或使用openvar('temp')时,Variables查看器会在第一列中显示Properties,在第二列中显示1x1 struct,会弹出一个新标签。< / p>

如果我在命令窗口中输入temp,那么表格就会打印出来。

如何在Variables查看器中查看表格单元格?

编辑2015-12-04 :我终于找到了一个可重现的例子并确定了问题。当Variables查看器包含尺寸大于2的数组时,它不显示我的表。例如:

tmp = table(ones(50,20, 20));

如果我双击工作区中的tmp,我会看到

table not displaying properly when it contains multi dimensional array

如果它可以显示与在命令窗口中运行以下命令相同的信息,那将是很好的:

>> tmp(1:5, :)

      Var1      
________________

[1x20x20 double]
[1x20x20 double]
[1x20x20 double]
[1x20x20 double]
[1x20x20 double]

2 个答案:

答案 0 :(得分:3)

一种可能的解决方案是在主路径中隐藏openvar.m,如上面的评论所示。为此,请将原始openvar.m的所有内容复制到另一个openvar.m文件中,并将此新文件放在路径中。

现在,在新openvar函数的末尾添加以下代码行

 v = evalin('base',name);
 if istable(v)
     v = table2struct(v);
     assignin('base','v', v);
     variable = com.mathworks.mlservices.WorkspaceVariableAdaptor('v');
     com.mathworks.mlservices.MLArrayEditorServices.openVariable(variable);
else
    evalin('base','clear v');
 end

代码将在基础工作区上创建一个新变量v。如果这个变量是一个表,它会在编辑器上以结构形式打开它,如果不是,它就会清除它。

这应该足以在一个新的struct变量中显示表格(我称之为v,但在变量编辑器中使用tempname建立一个解决方案应该很简单)给你你想要的视图。

不幸的是,这种解决方法只会给你一个假的&#34;读取原始表的访问权限,但没有&#34;假的&#34;显然,写访问权限。另一个缺点是,现在每次在桌面上调用openvar时,您都会被重定向到这个新的&#34;假的&#34; v struct变量。

使用其他名称myopenvar创建一个新函数并调用myopenvar('tmp')也可以,但在点击工作区中显示的变量时则不行。

(在Matlab R2015b上测试)

答案 1 :(得分:0)

您可以使用以下内容显示表格中的值:

openvar('tmp.Var1')

假设 tmp 是表的名称。

Variables编辑器的struct Properties中,您会找到一个包含char VariableNames的单元格Var1。如果您的表包含其他具有其他名称的变量,您可以在那里找到它们。该问题与您的数据有两个以上的维度有关。