八度:如何为任意函数和任意数量的参数实现外部乘积?

时间:2018-06-30 21:01:40

标签: octave outer-join

现在,在Mathematica中,您可以使用作用于给定功能f和一些列表l1l2l3上的常规outer product。 ....,ln,这样输出out是一个n-D数组/列表,元素为out(i1,i2,...,in) = f(l1(i1),l2(i2),...,ln(in))。该函数可以执行您想要的任何操作。

您如何在Octave / Matlab中做同样的事情?您能指出我现有的功能以及如何使用它吗?

我知道arrayfuncellfunbsxfun,但是可能我不完全了解如何使用它们。

到目前为止,我的尝试是

%% outer product for anonymous function returning a cell
function out = outerf2(f,c1,c2)
  l1 = length(c1);
  l2 = length(c2);
  out = {};
  for i = 1:l1 for j = 1:l2
    out{i,j} = f(c1{i},c2{j});
  endfor endfor
endfunction
function out = outerf3(f,c1,c2,c3)
  l1 = length(c1);
  l2 = length(c2);
  l3 = length(c3);
  out = {};
  for i = 1:l1 for j = 1:l2 for k = 1:l3
    out{i,j,k} = f(c1{i},c2{j},c3{k});
  endfor endfor endfor
endfunction

函数outerf2接受任何函数句柄或匿名函数,并对单元c1c2的所有元素组合进行评估。函数outerf3的功能相同,但只包含3个单元格。

测试1(请参见下面的代码):具有矩阵乘积的匿名函数。

输出单元格temp1的每个元素都是一个3x5矩阵(相应矩阵乘积的结果)。

测试2(请参见下面的代码):使用张量积的匿名函数

输出像元temp2的每个元素都是尺寸为[3,4,4,5]的4-D数组({元素的相应张量积和标量乘法的结果{1}})。 Frobenius范数(数组所有元素的平方和的平方根)仅用于检查结果是否相同,如果您想了解定义,请参见this question,但要了解具体功能不重要。

c3

0 个答案:

没有答案