如何在两个单元阵列上进行右阵分割

Rez*_*a_M 1 arrays matlab cell

我有两个单元格数组:A = {<16x1 double>,<37x1 double>,<43x1 double>}和B = {<16x1 double>,<37x1 double>,<43x1 double>}.现在,我想用单元格数组B的相应元素划分单元格数组A的每个元素,反之亦然!如果单元阵列B的元素大于单元阵列A的元素,则该偏差应为B./A,然后计算这些值的平方根.对于Two矩阵,我知道我可以简单地编写以下代码:

if(a > b )
 ratio= sqrt(a ./ b);
else
 ratio= sqrt(b ./ a);   
end
Run Code Online (Sandbox Code Playgroud)

但我不知道如何扩展此算法的单元格数组?我知道我可以定义两个for循环来访问单元格数组的每个向量,然后应用我的上面的代码,但是这个算法太慢了,因为我编写了像我提到的代码,所以它对大单元格数组没有用.看到它真的糟透了!THX为您提供帮助

Jon*_*nas 5

使用cellfun结合maxmin实现您想要的:

C = cellfun(@(x,y)sqrt(max(x,y)./min(x,y)), A, B, 'uniformOutput',false)
Run Code Online (Sandbox Code Playgroud)

cellfun将函数应用于单元格的每个元素(分别为长度为16,37和43的三个数组).'UniformOutput', false表示应在具有与输入相同数量的元素的单元数组中返回输出.

@(x,y)表示一个匿名函数,它接受两个输入参数(来自A和的相应数组B).

max(x,y)取最大值阵列的对应元件的xy,从而保证你总是有在分割的分子中的最大值.