how to change axis of a matix?

17 vues (au cours des 30 derniers jours)
Asliddin Komilov
Asliddin Komilov le 13 Sep 2019
Modifié(e) : Bruno Luong le 15 Sep 2019
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 commentaires
Asliddin Komilov
Asliddin Komilov le 14 Sep 2019
I also suspect that length(c)=y*z, still need to know how to do it.
Walter Roberson
Walter Roberson le 14 Sep 2019
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.

Connectez-vous pour commenter.

Réponse acceptée

Bruno Luong
Bruno Luong le 15 Sep 2019
Modifié(e) : Bruno Luong le 15 Sep 2019
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)');
mapping3D.png

Plus de réponses (1)

Walter Roberson
Walter Roberson le 14 Sep 2019
[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 commentaires
Asliddin Komilov
Asliddin Komilov le 15 Sep 2019
I may use C=((y-z)./y); main thing is to obtain the value of M at x by some ratio of y and z, so I can make surface out of it.
Walter Roberson
Walter Roberson le 15 Sep 2019
(y-z)/y is 1-z/y and since z and y both include 0, you still have nan and infinities.

Connectez-vous pour commenter.

Produits


Version

R2016a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by