Filter löschen
Filter löschen

How to subtract contents of cells in cell array?

8 Ansichten (letzte 30 Tage)
lil brain
lil brain am 27 Feb. 2022
Kommentiert: lil brain am 28 Feb. 2022
I am trying to get the euclidean distances from xyz coordinates (columns 1-3 of baskets_xyz cells) to a reference point (column 10 in each cell in baskets_xyz). I want to perform the euclidean distance calculation to each cell in baskets_xyz so that I receive a single column for each cell as an output. I have tried the following code:
H = @(x) sqrt(((x(:,1)-x(:,10)).^2) ...
+ ((x(:,2)-x(:,10)).^2) ...
+ ((x(:,3)-x(:,10)).^2));
baskets_xyz_h_ref = cellfun(H,baskets_xyz,'uniform',false);
When I run this code I get the error:
Undefined function 'minus' for input arguments of type 'cell'.
Error in Glitch_comparison_distances (line 96)
H = @(x) sqrt(((x(:,1)-x(:,10)).^2) ...

Akzeptierte Antwort

per isakson
per isakson am 28 Feb. 2022
Bearbeitet: per isakson am 28 Feb. 2022
The problem is that baskets_xyz is a cell array of cell arrays. Your cellfun statements requires a cell array of double (numeric). There is (R2018b) an obsolete function, flatten, which can be used to convert to a cell array of double.
(Because of the size I don't upload a copy baskets_xyz.mat.)
The code below does the trick without flatten.
% baskets_xyz
% baskets_xyz =
% 1×19 cell array
% Columns 1 through 3
% {1617×10 cell} {846×10 cell} {3812×10 cell}
cell_of_double = cellfun( @(c) cell2mat(c), baskets_xyz, 'uni',false );
H = @(x) sqrt(((x(:,1)-x(:,10)).^2) ...
+ ((x(:,2)-x(:,10)).^2) ...
+ ((x(:,3)-x(:,10)).^2));
baskets_xyz_h_ref = cellfun( H, cell_of_double, 'uni',false );
% baskets_xyz_h_ref =
% 1×19 cell array
% Columns 1 through 3
% {1617×1 double} {846×1 double} {3812×1 double}

Weitere Antworten (0)


Mehr zu Matrices and Arrays 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!

Translated by