2014-09-25 2 views
2

Предположим, мне нужно объявить (но не инициализировать значения) пять массивов 10x10, названных, скажем, A1 - A5. Fortran имеет хороший синтаксис для такого рода множественного описания массива:Объявление нескольких массивов в Julia

REAL(8), DIMENSION(10,10) :: A1, A2, A3, A4, A5 

Однако единственный метод Юли я знаю гораздо уродливее:

A1 = Array(Float64, 10, 10) 
A2 = Array(Float64, 10, 10) 
A3 = Array(Float64, 10, 10) 
A4 = Array(Float64, 10, 10) 
A5 = Array(Float64, 10, 10) 

Есть ли более краткий способ объявить несколько массивов одного измерения в Джулии?

ответ

8

Благодаря некоторой помощи @simonster в another question вы можете кратко объявить переменные без выполнения накладные расходы, используя метапрограммирование,

for x = [:A1,:A2,:A3,:A4,:A5] 
    @eval $x = Array(Float64,10,10) 
end 

Однако, теперь мы можем сделать один шаг лучше, чем Fortran, позволяя вам создавать имена динамически, а также:

for x in [symbol("A"*string(i)) for i=1:100] 
    @eval $x = Array(Float64,10,10) 
end 

Это позволит выделить 100 массивов A1-A100. Спасибо за комментарий @ rickhf12hs за эту идею/реализацию.

+0

благодарит за репутацию! 8-) Спасибо @simonster за то, что вы начали. – rickhg12hs

1

Предполагая, что это нормально, чтобы создать один временный массив, содержащий результирующие пять массивов, вы могли бы использовать понимание массива:

A1, A2, A3, A4, A5 = [Array(Float64, 10, 10) for i = 1:5] 
Смежные вопросы