Getting specific values from 3D matrix
7 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Dylan George
am 9 Jan. 2019
Kommentiert: Dylan George
am 10 Jan. 2019
Hi all, I have a 1200x1200x100 matrix and I'm trying to select/crop it using x indicies and y indicies I have found of interest. The all 4 lists of coordinates are 1x34 matrix. I should be getting something like 150x160x100 but running into problems using loops. Thank you for any help!
for N=1:34
xdata(N) = data(X1coordinates(N):X2coordinates(N),Y1coordinates(N):Y2coordinates(N),100);
end
7 Kommentare
Dylan George
am 10 Jan. 2019
The first row - meaning x1coordinates(1,1) :coordinates(1,1) and y1coordinates(1,1):y2coordinates(1,1) . Not all 34 rows which I need.
Akzeptierte Antwort
Guillaume
am 10 Jan. 2019
If the areas are different sizes, then you don't have a choice but storing them in a cell array. The code you have written is the correct approach. I suspect that it only works for the first row because your X1Coordinates is a column vector whereas your code assumes it's a row vector. That's easily fixed by iterating over the rows instead of columns or even better, by writing code that makes no assumption about the shape of the inputs and simply iterate over all the elements:
xdata = cell(size(X1coordinates)); %result is same shape and number of elements as X1coordinates
for i = 1 : numel(xdata) %iterate over all the elements
xdata{i} = data(X1coordinates{i}:X2coordinates{i}, Y1coordinates{i}:Y2coordinates{i}, :);
end
Or you can replace the whole lot by a single arrayfun:
xdata = arrayfun(@(x1, x2, y1, y2) data(x1:x2, y1:y2, :), X1coordinates, X2coordinates, Y1coordinates, Y2coordinates, 'UniformOutput', false);
Note that if your original code is correct, the name Xncoordinates, and Yncoordinates are a bit misleading, since your X is along the rows and Y along the columns which is not the standard convention.
Weitere Antworten (0)
Siehe auch
Kategorien
Mehr zu Resizing and Reshaping Matrices finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!