Constructing a 3D matrix out of single column coordinate data with a corresponding value

조회 수: 9 (최근 30일)
Hi,
I need to analyze a 3d velocity field from tecplot. I could transfer the data into a 4 column matrix consisting of 6644672 rows. The first three columns represent that XYZ respectively, and the fourth column is the velocity data at that coordinate.
Since I want to filter this field in the future, I for now need to construct a 3d Matrix out of this imported data. It is important that no coordinates get lost, that the velocity value stays at the right coordinate and that the coordinates are oriented in the right way to eachother.
The challenging thing for me was that the coordinates in the 4 column matrix are not ordered in some logical way.
Can someone help me?
  댓글 수: 2
Catalytic
Catalytic 2024년 3월 28일
What would the voxels of the 3D matrix contain, and how would those contents be related to the imported data?
Emil Litjens
Emil Litjens 2024년 3월 28일
Each voxel would contain a velocity value at a certain coordinate.

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

채택된 답변

Matt J
Matt J 2024년 3월 28일
편집: Matt J 2024년 3월 28일
Let's call your Nx4 matrix XYZV.
xyzv=num2cell(sortrows(XYZV,[3,2,1]) ,1);
[I,J,K,V] =deal(xyzv{:});
I=findgroups(I);
J=findgroups(J);
K=findgroups(K);
matrix3D=accumarray([I,J,K], V); %the result
  댓글 수: 3
Matt J
Matt J 2024년 3월 29일
It means your (x,y,z) data do not sweep over a cube exactly. You could try the modification below, which allows the (x,y,z) to deviate from the nodes of a cube with a tolerance, but I don't/can't know what the appropriate TOL for your data would be.
TOL=1e-4; %example
I=findgroupstol(I,TOL);
J=findgroupstol(J,TOL);
K=findgroupstol(K,TOL);
function G=findgroupstol(U,tol)
[~,~,G]=uniquetol(U,tol);
end
Emil Litjens
Emil Litjens 2024년 3월 29일
편집: Emil Litjens 2024년 3월 29일
You are a hero! It works, thanks a lot.

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

추가 답변 (1개)

Matt J
Matt J 2024년 3월 28일
편집: Matt J 2024년 3월 28일
If you are trying to query velocity values at arbitrary 3D locations, do not use a 3D array. Instead, use scatteredInterpolant or griddata.
  댓글 수: 3
Matt J
Matt J 2024년 3월 28일
편집: Matt J 2024년 3월 28일
But you don't possess velocity values at all points in a 3D lattice, only at some scattered cloud of (x,y,z) coordinates around them. How will you define values at the lattice points if not by interpolation?

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

카테고리

Help CenterFile Exchange에서 Shifting and Sorting Matrices에 대해 자세히 알아보기

태그

제품


릴리스

R2023b

Community Treasure Hunt

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

Start Hunting!

Translated by