Функция Julia невольно изменяет свой аргумент без ! - помогите мне понять это поведение?

Я не понимаю такого поведения Юлии. Каким-то образом массивы xit и mut соединены между собой и имеют общие значения в следующем MWE ниже:

sample_size = 100;
mc_reps = 100;
ka = .01;
threshold=1;
mut = Array{Float64}(undef,mc_reps,sample_size);
xit = mut;
mut[:,1] = ones(mc_reps);
function regime_prob(ka,ce,muu)
   h = 1/(1+ exp(ka*(ce-muu)))
   return h
end
xit[1,1] = regime_prob(ka,threshold,mut[1,1]);
xit[:,1] = regime_prob.(ka,threshold,mut[:,1]);

Я попробовал объявить встроенную функцию следующим образом: regime_prob(ka,ce,muu) = 1/(1+ exp(ka*(ce-muu)));

что не имело никакого значения. Есть ли какая-то тонкая идиома, к которой я невольно прибегаю?

Я ожидал, что массив mut сохранит в своих столбцах единицы, но каким-то образом в него продолжает записываться значение xit.

Думаю, я понял это. Будучи ленивым, я думаю, что виновата строка hit = mut. Я думал, что это будет перезаписано?

KeynesCoeFen 18.09.2023 18:58

Может быть, hit = copy(mut) будет полезен?

Dan Getz 18.09.2023 19:05

Восклицательный знак в именах функций не является синтаксическим, это просто соглашение.

BallpointBen 18.09.2023 19:50

@DanGetz прав - см. этот вопрос для получения дополнительной информации.

crazyraptor 18.09.2023 19:56

Вам также стоит посмотреть вот это: stackoverflow.com/questions/58150295/… Предлагаю пометить ваш вопрос как дубликат

Przemyslaw Szufel 18.09.2023 21:06
Что такое компоненты React? Введение в компоненты | Типы компонентов
Что такое компоненты React? Введение в компоненты | Типы компонентов
Компонент - это независимый, многократно используемый фрагмент кода, который делит пользовательский интерфейс на более мелкие части. Например, если мы...
0
5
71
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Если вопрос не закрывается как дубликат, правильные ответы скрываются в комментариях к вашему вопросу:

  1. Присвоение в Julia не копируется, поэтому xit = mut означает, что xit теперь является просто другим именем, относящимся к тому же объекту, что и mut:
julia> x = rand(5); y = x;

julia> x === y
true
  1. Если вы хотите скопировать, используйте copy(mut)

  2. Суффикс ! к имени функции в Julia — это всего лишь синтаксическое соглашение: вы можете написать myfunction(x), который изменяет x, так же, как и myfunction!(x), который этого не делает, но оба варианта не рекомендуются, поскольку они могут сбить с толку читателя.

Другие вопросы по теме

Похожие вопросы

Я нашел этот синтаксис для печати простых чисел и очень запутался. Я хотел бы, чтобы это сообщество прояснило
Perl для вызова функции tr при замене регулярного выражения
Как я могу исправить предупреждение о том, что класс «Форма» доступен за пределами определенной области видимости? (ЯВА 17)
Понимание неоднозначности перегрузки функций в C++: квадрат двойного числа и аргумент с плавающей запятой
Возникли трудности с разыменованием указателя в C
Условия на аргументы функции в Julia
Не могу понять, как использовать оператор if для проверки всех элементов массива с помощью обратного вызова и проверки, все ли они верны
Как писать коды в R для расчета определенной последовательности в R для определенного возраста
Функция удаления не работает, пока я не добавлю оператор if с истиной и ложью
Программа на C++ выводит адрес памяти, но только при использовании в качестве функции