Вы можете просто написать:
A = collect(1:8)
B = [10,20]
C = findall(A.<=2)
A[C] = B
Использование функции findall
также можно переписать как C = findall(x -> x <= 2, A)
, чтобы уменьшить количество выделений. Ключ в том, что лучше, если C
содержит фактические индексы, чем логические индексы. Технически A[C] = B
также будет принимать логические индексы в C
, но тогда это медленнее. И при условии, что C
вычисляется один раз, а A[C] = B
вычисляется много раз, лучше предварительно вычислить индексы, которые вы хотите использовать.
Если C
меняется с каждой итерацией, то, возможно, было бы лучше написать C .= A .<= 2
, а затем A[C] = B
(обратите внимание, что здесь я использую внутреннее обновление C
, поскольку, когда оно обновляется много раз, оно быстрее ). Вам нужно будет оценить, что лучше в вашем конкретном случае.