Extracting Data from Cells

조회 수: 8 (최근 30일)
Devrim Tugberk
Devrim Tugberk 2019년 7월 19일
편집: Franklin 2022년 4월 15일
Dear Matlab users,
I am facing some trouble extracting data from a cell. I attached the a screenshots showing what my cell looks like (cells within a cell). Each cell in the "big" cell has xyz data and i would like to extract each column representing the respective coordinates as column vectors.
My explanation might have been confusing so i will try summarize: Extract the "minor" cells from the main cell, extract the xyz from each minor cell as column vectors.
Thank you for the help
Capture.JPG
Capture_1.JPG
  댓글 수: 3
Adam Danz
Adam Danz 2019년 7월 19일
I interpreted it as an indexing question.
Devrim Tugberk
Devrim Tugberk 2019년 7월 19일
My goal was the "extract" the xyz coordinates as column vectors and plot them using scatter3()

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

채택된 답변

madhan ravi
madhan ravi 2019년 7월 19일
편집: madhan ravi 2019년 7월 19일
vv=cellfun(@(x) x(:,1:3),cross_sections,'un',0); % assuming the first three columns in each cell represents x,y & z
v=cat(1,vv{:}); % gathering x,y, & z of each cell into one matrix
scatter3(v(:,1),v(:,2),v(:,3))
% x -^ ^- y ^- z
  댓글 수: 7
Devrim Tugberk
Devrim Tugberk 2019년 7월 19일
One last tiny tweak, is there a way I could supress the scatter3 function so it doesnt spit out 138 figures? Maybe just give me 138 tables or vectors or something which i can refer back to and plot the desired one only?
madhan ravi
madhan ravi 2019년 7월 19일
Then for instance:
scatter3(vv{2}(:,1),vv{2}(:,2),vv{2}(:,3))

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

추가 답변 (2개)

Adam Danz
Adam Danz 2019년 7월 19일
편집: Adam Danz 2019년 7월 19일
I think this is the format of your data:
C = {rand(20,4),rand(15,4),rand(22,4)};
Extract the first 3 columns of cell 2
C{2}(:,1:3)
Extract column 2 of cell 3
C{3}(:,2)
Extract the entire matrix from cell 1
C{1}
Extract the entire matrix from cell 1 but reorganize it into a single column
C{1}(:)
  댓글 수: 1
Adam Danz
Adam Danz 2019년 7월 19일
편집: Adam Danz 2019년 7월 19일
"My goal was the "extract" the xyz coordinates as column vectors and plot them using scatter3()"; " I need to have 3 column vectors for each cell"
@ Devrim Check out the 2nd block of code in my answer. It does what you're describing. If you want to perform that block on all cells,
c3 = cellfun(@(x)x(:,1:3), C, 'UniformOutput', false)

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


Guillaume
Guillaume 2019년 7월 19일
편집: Guillaume 2019년 7월 19일
If you want to create a scatter3 plot using the coordinates from all the cells of Cross_sections, this is how I'd go about it:
allsections = vertcat(Cross_sections{:});
scatter3(allsections(:, 1), allsections(:, 2), allsections(:, 3));
  댓글 수: 3
Guillaume
Guillaume 2019년 7월 19일
Indeed! Otherwise, the operation does nothing.
Franklin
Franklin 2022년 4월 15일
편집: Franklin 2022년 4월 15일
Hello All;
I have a 70x1 cell data called info. Inside info is the 1x1 struct, each with 2 variables A and B. index 1.A and 1.B have a size(827x1) while all others 2.A or 2.B...70 are 1348x1.
Am able to extract some portions of "info" e.g. Y_1...Y_5 which I would use for my Y axis on the plot
Q1. How do I plot test1 (Y axis) against X_2(X Axis) without array errors e.g. Arrays have incompatible sizes for this operation.
Q2. How do I get Yall using a Loop or any faster method
Code:
Y_2 = info{2}(:,1).B; % Get Cell 2B data i.e. 1348x1 double
Y_3 = info{3}(:,1).B; % Get Cell 3B data i.e. 1348x1 double
Y_4 = info{4}(:,1).B; % Get Cell 4B data i.e. 1348x1 double
Y_5 = info{5}(:,1).B; % Get Cell 5B data i.e. 1348x1 double
X_1 = info{1}(:,1).A; % Get Cell 1A data i.e. 827x1 double
X_2 = info{5}(:,1).A; % Get Cell 5A data i.e. 1348x1 double
Yall = Y_2...Y_70; % Get all Y values using a loop
test1 = Yall./X_1;
figure(2)
plot(X_2,test1);hold on;
figure(3)
plot(X_1,test1);hold on;

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

카테고리

Help CenterFile Exchange에서 Loops and Conditional Statements에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by