首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >可视化的二维图形的n-昏暗。在matlab中通过surf()数组

可视化的二维图形的n-昏暗。在matlab中通过surf()数组
EN

Stack Overflow用户
提问于 2015-01-17 11:06:50
回答 2查看 93关注 0票数 1

我想看2点。在matlab中绘制三维或高维数组的两个参数的不同组合的曲面图.未显示维度的数据被集成(即在其余维度中求和)。我正在使用surf(),并用于(1,2)以外的参数组合(例如。(1,3),(2,3) .)我必须重新排列数据矩阵才能让它正常工作。

我正在寻找一个替代命令(或更短的代码)来完成这项工作。

下面是代码:

代码语言:javascript
复制
a=zeros(3,3,2);  
a(:,:,1) = [1 2 3 ;4 5 6; 7 8 9; 10 11 12];       % // data matrix   
a(:,:,2) = -[1 2 3 ;4 5 6; 7 8 9; 10 11 12]*2;    % // data matrix  
ai=[[1 2 3 4]' [5 6 7 0]' [8 9 0 0]'];            % // parameter vector  

mat12 = sum(a,3);  
surf(ai(1:3,2),ai(1:4,1),mat12)  

aux13 = sum(a,2);                         
for i = 1:2; mat13(:,i) = aux13(:,:,i);     
surf(ai(1:2,3),ai(1:4,1),mat13)  

aux23 = sum(a,1);  
for i = 1:2; mat23(i,:) = aux23(:,:,i);     
surf(ai(1:3,2),ai(1:2,3),mat23) 

换句话说,我正在寻找一种不用surfaux23变量和for循环而对矩阵mat13mat23使用aux13的方法。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-01-17 15:50:43

首先,您的示例没有运行,因为您声明a=zeros(3,3,2);为矩阵3x3x2,但您立即尝试将其填充为4x3x2矩阵,因此我不得不将第一行调整为:a=zeros(4,3,2);

如果我用这种调整运行您的代码,那么您的辅助变量和for循环将修改/重塑一个矩阵,去掉它的单例维度。Matlab为此提供了一个方便的函数:squeeze

例如,变量aux13是维度4x1x2,那么mat13=squeeze(aux13);实现了与for循环相同的功能。您的矩阵mat13现在是维度4x2。

由于不需要for循环,所以可以直接对求和结果:mat13=squeeze( sum(a,2) );调用squeeze,从而完全绕过辅助变量。

完整的示例中,下面的代码与代码示例完全相同:

代码语言:javascript
复制
mat12 = sum(a,3);  
surf(ai(1:3,2),ai(1:4,1),mat12)

mat13 = squeeze( sum(a,2) ) ;
surf(ai(1:2,3),ai(1:4,1),mat13)

mat23 = squeeze( sum(a,1) ) ;
mat23 = mat23.' ;                %'// <= note the "transpose" operation here
surf(ai(1:3,2),ai(1:2,3),mat23)

请注意,我必须转置mat23以使其与您的示例中的匹配。

sum(a,1)是1x3x2 =>压缩,您可以得到一个3x2矩阵,但是您的代码在2x3矩阵中排列相同的值,所以使用transposetranspose运算符有一个简写符号.'

我在一个单独的行中使用它只是为了突出显示它。一旦理解了,您就可以简单地将整个操作写成一行:

代码语言:javascript
复制
mat23 = squeeze(sum(a,1)).' ;
票数 1
EN

Stack Overflow用户

发布于 2015-01-17 14:07:57

编写循环的方式并不完全是MATLAB语法。下面是正确的循环语法。在第2行和第3行,您尝试将(4x3)-matrices加载到(3x3)-matrices中。这就是为什么你会得到一个下标错误。你可以通过把零矩阵变大来解决这个问题。以下是一些语法修正:

代码语言:javascript
复制
a=zeros(4,3,2);  
a(:,:,1) = [1 2 3 ;4 5 6; 7 8 9; 10 11 12];       % // data matrix   
a(:,:,2) = -[1 2 3 ;4 5 6; 7 8 9; 10 11 12]*2;    % // data matrix  
ai=[[1 2 3 4]' [5 6 7 0]' [8 9 0 0]'];            % // parameter vector  

mat12 = sum(a,3);  
surf(ai(1:3,2),ai(1:4,1),mat12)  

aux13 = sum(a,2);                         
for i = 1:2 mat13(:,i) = aux13(:,:,i);     
surf(ai(1:2,3),ai(1:4,1),mat13)  
end

aux23 = sum(a,1);  
for i = 1:2 mat23(i,:) = aux23(:,:,i);     
surf(ai(1:3,2),ai(1:2,3),mat23) 
end

现在,你到底想在这些循环中做些什么?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27999641

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档