how to change axis of a matix?
16 ビュー (過去 30 日間)
古いコメントを表示
my matrix is M(x,y,z) where:
x=1:90
y=1:3:120
z=1:40
and
c=y./z
and I need to convert M into N(x,c).
Any ideas?
6 件のコメント
Walter Roberson
2019 年 9 月 14 日
No, length of y and z are the same and y./z would have the same length.
Some of what you wrote does not seem to make sense until you start talking about grids of data, but then you have to ask about the sizes of the grids.
採用された回答
Bruno Luong
2019 年 9 月 15 日
編集済み: Bruno Luong
2019 年 9 月 15 日
load('testdata.mat');
Ufun = @(X,Y,Z) X;
Vfun = @(X,Y,Z) Y./(Z+200);
[X,Y,Z] = ndgrid(x,y,z);
U = Ufun(X,Y,Z);
V = Vfun(X,Y,Z);
U = U(:);
V = V(:);
[umin,umax] = bounds(U);
nu = 21;
u = linspace(umin,umax,nu);
[vmin,vmax] = bounds(V);
nv = 21;
v = linspace(vmin,vmax,nv);
[~,~,I] = histcounts(U,u);
[~,~,J] = histcounts(V,v);
N = accumarray([J I], M(:), [nu nv]-1, @mean, NaN);
midfun = @(x) 0.5*(x(1:end-1)+x(2:end));
u = midfun(u);
v = midfun(v);
surf(u,v,N);
xlabel('u (=x)');
ylabel('v (=y/(200+z)');
0 件のコメント
その他の回答 (1 件)
Walter Roberson
2019 年 9 月 14 日
[X, Y, Z]=ndgrid(1:90,1:3:120,1:40);
C = round(ceil(Y./Z));
N = accumarray([X(:), C(:)], M(:), [], @mean, nan);
surf(N, 'edgecolor', 'none')
xlabel('x')
ylabel('c')
Or possibly N.' instead of N
8 件のコメント
Walter Roberson
2019 年 9 月 15 日
(y-z)/y is 1-z/y and since z and y both include 0, you still have nan and infinities.
参考
カテゴリ
Help Center および File Exchange で Logical についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!