Вы можете делать, что хотите, если вы инициализируете свой массив следующим образом:
arr = Array{Foo,2}(undef,5,5)
В этом примере вы создаете массив, в котором каждый элемент может иметь тип Foo, и он имеет два измерения. Параметры, передаваемые этому «конструктору», имеют значение undef, что говорит о том, что не все элементы инициализированы, и о размере двух измерений. Вы можете проверить раздел Создание и инициализация раздела Arrays руководства Julia .
Если вы ищете гибкость списка python, в который вы можете помещать объекты любого типа, вы можете сделать
arr = Array{Any,2}(undef,5,5)
В этом случае Any указывает, что элементы массива могут быть любого типа.
Однако вы должны знать, что это, вероятно, плохой метод, если вам нужна производительность, поскольку наличие массивов с элементами типа «Любой» препятствует созданию Джулией эффективный код для ваших массивов.
Почему ваш первый пример не работал
Вы создавали массив с элементами типа Float64, и вы пытались назначить функцию этим элементам , Вы не можете изменить тип массива на лету. Наличие определенного типа для элементов позволяет julia иметь эффективный способ сохранения вещей в памяти, а также позволяет компилятору использовать быстрые функции при выполнении операций с массивами. Посмотрите на раздел Types руководства Julia
Почему не работает второй пример
Это потому, что вы не использовали правильную форму для инициализатора. Я показал правильную форму.
PS Вы уверены, что можете сделать это с numpy массивами?
Я только что попробовал
import numpy as np
a = np.zeros(5)
a[0] = 'hello'
и получил ошибка типа, похожая на ту, что вы видите у Юлии:
ValueError: could not convert string to float: 'hola'