В python (используя numpy) я могу транслировать массив в другую форму:
>>> import numpy as np
>>> a = np.array([2,3,4])
>>> b = np.zeros((3,2))
>>> b[:,:] = np.zeros((3,2))
>>> b[:,:] = a[:,np.newaxis] #<-- np.newaxis allows `a` to be "broadcasted" to the same shape as b.
>>> b
array([[ 2., 2.],
[ 3., 3.],
[ 4., 4.]])
>>> c = np.zeros((2,3))
>>> c[:,:] = a[np.newaxis,:]
>>> c
array([[ 2., 3., 4.],
[ 2., 3., 4.]])
Есть ли способ добиться такого же эффекта в fortran? У меня есть подпрограмма, которая ожидает передачи массива 2D
-- я хотел бы "транслировать" свои одномерные массивы до двумерных, как я продемонстрировал выше. Похоже, что это имеет значение, но мой 2D-массив действительно имеет явный интерфейс.
В качестве примечания я подумал, что эта функциональность может предоставляться reshape
встроенный, -- что-то вроде:
real,dimension(3) :: arr1d
reshape(arr1d, (/3,3/), order=(/1,/1))
но после прочтения документов я не думаю, что это возможно, поскольку order
, похоже, должен включать все числа от 1 до «N».
Редактировать: Чтобы быть немного более понятным, я ищу простой способ создать пару преобразований на входе a
, чтобы:
случай 1
b(i,j) .eq. a(i) !for all j, or even just j=1,2
и
случай 2
b(j,i) .eq. a(i) !for all j, or even just j=1,2
бонусные баллы1 за произвольную размерность:
b(i,j,k) .eq. a(i,j)
b(i,k,j) .eq. a(i,j)
и Т. Д.
1отказ от ответственности - на самом деле у меня нет НАСТОЛЬКО сверхспособностей, чтобы начислять бонусные баллы отвечающему ;-)