2014-09-23 3 views
0

Я новичок в julia и у меня проблема. У меня есть массив, y.Использование результата для доступа к массиву julia

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 

Может кто-нибудь объяснить, как сделать первую версию работы? Или, по крайней мере, объясните, почему это не так?

Спасибо!

ответ

6

Во-первых, я думаю, вы имели в виду 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, :]) 

уже не в пространстве чувствительного контекста.

я рекомендовал бы, чтобы при написании Джулии коды, вы никогда не должны ставить пробел между именем функции и скобкой ( в вызове функции или переменной и кронштейне [ в индексации, так как код будет рассматриваться по-разному в пространстве чувствительных контекстов , Например, ваш первый пример без дополнительных пространств

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

работает нормально (при условии, что вы определяете d и x_filt соответственно первый).

+0

спасибо, что очень ценит. – davidj