/ / Łańcuch wektorowy zamień na Julia - tablice, łańcuch, julia-lang

Ciąg wektorowy zastępuje Julia - tablice, łańcuch, julia-lang

Chciałbym znaleźć elementy x który zawiera "X" i wymienić "X" z "".

v = split("a b c d e f g h i j k l m n o p X")
x = rand(v,100) .* rand(v,100) .* rand(v,100)

A za pomocą for pętla mogłabym:

for i=1:length(x)
x[i] = replace(x[i], "X", "")
end

Czy w ten sposób manipuluje się wektorami strunowymi w Julii? Czy jest tam .replace lub apply(sapply(x, replace, "X", "") jak używany w R) zestaw funkcji, których powinienem używać?

Odpowiedzi:

1 dla odpowiedzi № 1

Możesz to zrobić jak

[replace(i,"X","") for i in x]

Ale jako Stefan wskazane w komentarzach, tworzy nowy wektor. Prawidłowy sposób powinien być (jak wyjaśniono przez Matt)

x .= replace.(x, "X", "")

Aby krótko podsumować funkcję zastępowania, oto, co mówią oficjalne dokumenty Julii.

help?> replace
search: replace redisplay

replace(string, pat, r[, n])

Search for the given pattern pat, and replace each occurrence with r. If n is provided, replace at most n occurrences. As
with search, the second argument may be a single character, a vector or a set of characters, a string, or a regular
expression. If r is a function, each occurrence is replaced with r(s) where s is the matched substring. If pat is a
regular expression and r is a SubstitutionString, then capture group references in r are replaced with the corresponding
matched text.

julia>

2 dla odpowiedzi nr 2

Używanie do zapętlania lub rozumienia jest świetnerozwiązanie i zazwyczaj jest bardzo wydajnym rozwiązaniem. Pętle są szybkie w Julii, więc nie musisz się martwić o wektoryzację kodu, aby był szybki. To powiedziawszy, w nadchodzącym wydaniu 0.6 możesz napisać szybki wektoryzowany kod w Julii za pomocą nadawania kropkowego ponieważ ciągi są teraz traktowane jako elementy skalarne w emisji:

julia> replace.(x, "X", "")
100-element Array{String,1}:
"lod"
"kk"
"eco"
"jac"
⋮
"ojn"
"hmc"
"pb"

Możesz to zrobić w miejscu dzięki:

x .= replace.(x, "X", "")