语法混淆:函数调用与数组索引

时间:2017-05-13 14:13:40

标签: julia

原标题:" Julia的Kronecker产品"

假设:

 p       = 0.7;
 PI      = [p 1-p;1-p p];

 Q       = zeros(20,20);

在Matlab中我们可以运行:

A=kron(PI(j,:),Q)
在朱莉娅的时候:

A=kron[PI[j,:],Q]

这会导致以下错误:

MethodError: no method matching getindex(::Base.#kron, ::Array{Float64,1}, ::Array{Float64,2})

如何解决此问题并获得类似于Matlab的结果?

1 个答案:

答案 0 :(得分:4)

Matlab中您的行中有()的两种用法:

A=kron(PI(j,:),Q)

outer()包围传递给kron函数的参数,而inner()提供PI的索引。在Julia(和Python,C和许多语言)中,我们使用不同的符号来实现这两个不同的目的。

在Julia中,我们使用方括号[]进行索引,()围绕函数参数。

所以:

julia> kron(PI[1, :], Q)
40×20 Array{Float64,2}:
 0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  …  0.0  0.0  0.0  0.0  0.0  0.0  0.0
 0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0     0.0  0.0  0.0  0.0  0.0  0.0  0.0
 0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0     0.0  0.0  0.0  0.0  0.0  0.0  0.0
 0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0     0.0  0.0  0.0  0.0  0.0  0.0  0.0
 [etc.]