I have data at given xyz points (i.e. locations). For each xy pair, there are multiple z values. I'd like to average the data along the z dimension. In other words, go from 3D+Value to 2D+AveragedValueAlongZ. Is there a fast way to do this (i.e. not needing loops)? Thanks in advance.

 채택된 답변

Walter Roberson
Walter Roberson 2018년 10월 5일
편집: Walter Roberson 2018년 10월 5일

0 개 추천

[uxy, ~, uidx] = unique([x(:), y(:)], 'rows');
avgv = accumarray(uidx, v(:), [], @mean);
output = [uxy, avgv];

댓글 수: 2

Walter Roberson
Walter Roberson 2018년 10월 5일
The above can be used for scattered points where there are not necessarily the same number of z for each x/y combination.
Alireza H.
Alireza H. 2018년 10월 5일
편집: Alireza H. 2018년 10월 5일
Thank you so much, Walter! This is exactly what I needed. My data was actually 4D: [ x y z Value] and I wanted 3D z-averaged: [x y AveragedValueAlongZ] but a minor change to your code did the job.

댓글을 달려면 로그인하십시오.

추가 답변 (1개)

jonas
jonas 2018년 10월 5일

1 개 추천

mean(A,3)

댓글 수: 2

Walter Roberson
Walter Roberson 2018년 10월 5일
This can be useful, but does depend upon the points being gridded, with an equal number of z points for each (x,y) pair.
jonas
jonas 2018년 10월 5일
Ah yes, that's how I interpret 3D to 2D, but in hindsight I agree that OP is probably looking for your solution.

댓글을 달려면 로그인하십시오.

카테고리

도움말 센터File Exchange에서 Discrete Data Plots에 대해 자세히 알아보기

질문:

2018년 10월 5일

편집:

2018년 10월 5일

Community Treasure Hunt

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

Start Hunting!

Translated by