Юлия: Как найти расположение строк (в строковом массиве) в другом строковом массиве - PullRequest
3 голосов
/ 19 октября 2019

Я хочу вернуть логический вектор, показывающий расположение строк, которые являются членами двух строковых массивов A и B.

В Matlab это будет

A = ["me","you","us"]
B = ["me","us"]
myLogicalVector = ismember(A,B)

myLogicalVector =

  1×3 logical array

   1   0   1

Как мнедобиться этого в Джулии?

Я пытался

myLogicalVector = occursin.(A,B)
myLogicalVector = occursin(A,B)

Кажется, что происходит в работает, только если два массива входных строк имеют одинаковую длину или одна строка является скаляром - я неуверен, что я прав в этом.

1 Ответ

5 голосов
/ 19 октября 2019

Вы можете написать:

julia> in(B).(A)
3-element BitArray{1}:
 1
 0
 1

Более подробные версии аналогичной операции (обратите внимание, что тип массива отличается во всех случаях, кроме первого):

julia> in.(A, Ref(B))
3-element BitArray{1}:
 1
 0
 1

julia> [in(a, B) for a in A]
3-element Array{Bool,1}:
 1
 0
 1

julia> map(a -> in(a, B), A)
3-element Array{Bool,1}:
 1
 0
 1

julia> map(a -> a in B, A)
3-element Array{Bool,1}:
 1
 0
 1

julia> [a in B for a in A]
3-element Array{Bool,1}:
 1
 0
 1

ЕслиA и B были большими, и вам требовалась производительность, затем конвертируйте B в Set следующим образом:

in(Set(B)).(A)

(вы платите единовременную стоимость создания набора, но затемпоиск будет быстрее)

...