MATLAB: Complex subtraction of cell array from matrix

subtraction matrix cell array convert speed cpu fast

Hi, I have two variables called 'out' and 'in'. The out variable is a cell array which is displayed as out =
[ 52416x24 double]
[ 51888x24 double]
[ 51384x24 double]
[ 50880x24 double]
[ 50400x24 double]
[ 49920x24 double]
[ 49440x24 double]
[ 48984x24 double]
[ 48528x24 double]
[ 48072x24 double]
[ 47640x24 double]
[ 47208x24 double]
[ 46800x24 double]
[ 46392x24 double]
[ 45984x24 double]
[ 45576x24 double]
[ 45192x24 double]
[ 44808x24 double]
[ 44424x24 double]
[ 44040x24 double]
[ 43680x24 double]
[ 43320x24 double]
[ 42960x24 double]
[ 42600x24 double]
[ 42264x24 double]
[ 41928x24 double]
[ 41592x24 double]
[ 41280x24 double]
[ 40944x24 double]
[ 40632x24 double]
[ 40320x24 double]
[174696x24 double]
[169056x24 double]
[163776x24 double]
[158808x24 double]
[154128x24 double]
[149736x24 double]
[145560x24 double]
[141648x24 double]
[137904x24 double]
[134376x24 double]
[131016x24 double]
[127824x24 double]
[124776x24 double]
[121872x24 double]
[119112x24 double]
[116472x24 double]
[113928x24 double]
[111504x24 double]
[109176x24 double]
[106944x24 double]
[104808x24 double]
[102768x24 double]
[100776x24 double]
[ 98880x24 double]
[ 97056x24 double]
[ 95280x24 double]
[ 93576x24 double]
[ 91944x24 double]
[ 90360x24 double]
[ 88824x24 double]
[ 87336x24 double]
[ 85920x24 double]
[ 84528x24 double]
[ 83184x24 double]
[ 81888x24 double]
[ 80616x24 double]
[ 79416x24 double]
[ 78216x24 double]
[ 77064x24 double]
[ 75960x24 double]
[ 74880x24 double]
[ 73824x24 double]
[ 72792x24 double]
[ 71784x24 double]
[ 70824x24 double]
[ 69888x24 double]
[ 68952x24 double]
[ 68064x24 double]
[ 67200x24 double]
[ 66336x24 double]
[ 65520x24 double]
[ 64704x24 double]
[ 63912x24 double]
[ 63144x24 double]
[ 62400x24 double]
[ 61656x24 double]
[ 60936x24 double]
[ 60240x24 double]
[ 59568x24 double]
[ 58896x24 double]
[ 58224x24 double]
[ 57600x24 double]
[ 56976x24 double]
[ 56352x24 double]
[ 55752x24 double]
[ 55176x24 double]
[ 54600x24 double]
[ 54024x24 double]
[ 53472x24 double]
[ 52944x24 double]
[174696x24 double]
[174696x24 double]
The variable in is displayed as matrix: in =
0.2788
0.2186
0.2170
0.2435
0.2156
0.2291
0.2265
0.2523
0.2930
0.3196
0.3299
0.2958
0.2279
0.2180
0.1477
0.1014
0.1281
0.1473
0.1485
0.1944
0.1926
0.1361
0.0806
0.5136
I want to do the following: I want to subtract the variable "in" from "out" in such a manner that the first 24 rows of each column of every table of variable "out" is subtracted from variable "in", then the next consecutive rows of table "out" subtracted from table "in", then the next consecutive rows and so on until all rows are completed. The example below illustrates what I want to do:
row 0-24 from every table of variable "out" minus 24 rows from Table "in" row 25-49 every table of variable "out" minus 24 rows from Table "in" and so on.
I want the result to be a positive value so absolute value. At the same time this is a labor intensive process so I want this to be performed quickly. How can I do this?
thanks

Best Answer

Look at this example
out={rand(48,24);rand(72,24)}
in=rand(24,1)
res1=cellfun(@(x) bsxfun(@minus,permute(reshape(x,24,24,[]),[2 1 3]),in),out,'un',0)
res=cellfun(@(x) reshape(x,[],24),res1,'un',0)