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
ます。上で示したように、1 次元配列を 2 次元に「ブロードキャスト」したいと考えています。問題になる可能性が高いように思われるので、私の 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つの免責事項 - 私は実際には回答者にボーナスポイントを与えるほどのスーパーパワーを持っていません;-)