Julia:外积函数

14

R 中,函数outer结构化地允许您取两个向量xy的外积,同时为每个组合提供一些实际函数的选项。例如outer(x,y,'-')创建一个“外积”矩阵,其中包含xy之间元素差异的逐元素计算结果。Julia是否有类似的功能?


3
为什么不直接使用 x*y'?如果 - 表示外积,我不确定它的作用。或者你可能需要进行广播操作:x .- y' - Chris Rackauckas
1个回答

11
广播是Julia中的一项操作,即用.将两个容器连接起来。当两个容器具有相同的大小时,这是一种元素级别的操作。例如:如果size(x)==size(y),那么x.*y就是元素级别操作。然而,当形状不匹配时,广播就真正发挥作用了。如果其中一个是行向量,另一个是列向量,则输出将是二维的,out[i,j]与列向量的第i行和行向量的第j行相匹配。这意味着x .* y是一种写外积的奇特方式,如果一个是行向量,另一个是列向量。

总的来说,广播执行的操作如下:

当维度变大时,这会导致浪费,因此Julia提供了broadcast(),它会扩展数组参数中的单例维度以匹配另一个数组中的相应维度,而不使用额外的内存。

(以上内容摘自Julia手册)

但这可以推广到所有其他二元运算符,所以x .- y'就是你要找的东西。


7
实际上,x .- y' 就是他/她正在寻找的东西。 - Michael K. Borregaard
太好了,谢谢!有没有一种方法可以推广到除了(+-*/)之外的情况?例如,是否有一种首选的方法来使用某个接受两个参数的函数 f 来实现这一点? - jjjjjj
3
任何二元运算符都可以像这样进行广播操作。对于函数调用,您可以使用 f.(x,y') 的形式。 - Chris Rackauckas
如果您不知道size(x)==size(y)是否成立,但无论如何都想要外积矩阵,该怎么办? - Octavius
这对于外积并不重要,我已经解释过了。 - Chris Rackauckas
只有当其中一个向量长度为1时,行向量和列向量才具有相同的大小。明白了。 - Octavius

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接