我是朱莉娅的新手并且有问题。我有一个数组,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
有人可以解释如何使第一个版本有效吗?或者至少解释为什么不呢?
谢谢!
答案 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
工作正常(前提是您先定义d
和x_filt
)。