我已经在Octave中运行了FEMM仿真,结果得到了一个具有以下格式的相当大的矩阵:
resultMatrix = 0 90 120
0 80 110
10 80 100
在正常的笛卡尔系统中,看起来像这样
result = [1, 1, 0;
2, 1, 90;
3, 1, 120;
1, 2, 0;
...]
我该怎么做?
答案 0 :(得分:2)
您可能之前已经在计算xy坐标,因此您应该避免使用它们,这样就不必立即重新计算它们。不过,这是您的答案:
octave:1> results = [0 90 120; 0 80 110; 10 80 100];
octave:2> col1 = repmat ([1; 2; 3], [3 1]); # repeat matrix
octave:3> col2 = ([1; 1; 1] .* [1 2 3])(:); # automatic broadcasting
octave:4> coords = [col1 col2 results.'(:)]
coords =
1 1 0
2 1 90
3 1 120
1 2 0
2 2 80
3 2 110
1 3 10
2 3 80
3 3 100
答案 1 :(得分:2)
我将提供一个替代答案,我怀疑这是您需要的而不是您要的。有效地将您的输出安排在一个网格中,并且您想为每个元素分配坐标。大概是想这样做,以便以后可以沿着这些线绘制表面或其他物体。
以八度为单位的最直接方法是创建一个网格,例如
[Xindices, Yindices] = ndgrid( 1:size(resultMatrix,1) , 1:size(resultMatrix,2) );
然后,您可以像这样直接绘制表面:
surface( Xindices, Yindices, resultMatrix );
还请注意,如果您确实希望以您描述的格式输出,则只需将所有相关的n维数组重新排列为矢量,就可以从上述内容中轻松获得输出:
result = [ Xindices(:), Yindices(:), resultMatrix(:) ];