How to subtract contents of cells in cell array?
2 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
lil brain
el 27 de Feb. de 2022
Comentada: lil brain
el 28 de Feb. de 2022
Hi,
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) ...
0 comentarios
Respuesta aceptada
per isakson
el 28 de Feb. de 2022
Editada: per isakson
el 28 de Feb. de 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}
Más respuestas (0)
Ver también
Categorías
Más información sobre Cell Arrays en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!