使用函数的结果来访问julia数组

时间:2014-09-23 08:49:54

标签: julia

我是朱莉娅的新手并且有问题。我有一个数组,y。

y = rand (5, 10)
y [1. 1] = 0

运行此操作会给我一个错误

for j=1:d   
    x_filt [j, 1] = y [j, findfirst (y [j, :])]
end

ERROR: syntax: missing separator in array expression

但这不是

for j=1:d   # fix to 1st obs if 1st tick is missing
    temp = findfirst (y [j, :])
    x_filt [j, 1] = y [j, temp];        
end 

有人可以解释如何使第一个版本有效吗?或者至少解释为什么不呢?

谢谢!

1 个答案:

答案 0 :(得分:7)

首先,我猜你的意思是y[1, 1] = 0?如果我使用y [1. 1] = 0,我会收到错误。

Julia在某些上下文中有空间敏感语法,在括号[]中很明显。 一些例子:

julia> max(1, 2)
2

julia> max (1, 2)
2

julia> [max(1, 2)]
1-element Array{Int64,1}:
 2

julia> [max (1, 2)]
1x2 Array{Any,2}:
 max  (1,2)

julia> [1 + 2]
1-element Array{Int64,1}:
 3

julia> [1 +2]
1x2 Array{Int64,2}:
 1  2

在您的第一个示例中,在

中调用findfirst
x_filt [j, 1] = y [j, findfirst (y [j, :])]

被解释为两个以空格分隔的项findfirst(y [j, :])]。朱莉娅然后抱怨说他们被一个空格隔开而不是一个逗号。

在你的第二个例子中,自从在

中调用findfirst以来,你就可以避开这个问题
temp = findfirst (y [j, :])

不再处于空间敏感的环境中。

我建议在编写Julia代码时,不要在函数调用中的函数名和括号(之间或在索引中的变量和括号[之间放置一个空格,因为代码将在空间敏感的环境中区别对待。例如,你的第一个没有额外空格的例子

for j=1:d   
    x_filt[j, 1] = y[j, findfirst(y[j, :])]
end

工作正常(前提是您先定义dx_filt)。