How to subtract contents of cells in cell array?

6 ビュー (過去 30 日間)
lil brain
lil brain 2022 年 2 月 27 日
コメント済み: lil brain 2022 年 2 月 28 日
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) ...

採用された回答

per isakson
per isakson 2022 年 2 月 28 日
編集済み: per isakson 2022 年 2 月 28 日
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}
  1 件のコメント
lil brain
lil brain 2022 年 2 月 28 日
Very helpful thank you!

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeCell Arrays についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by