在 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
传入一个数组——我想将我的一维数组“广播”到二维,正如我在上面演示的那样。看起来很重要,我的二维数组确实有一个明确的接口。
作为旁注,我认为这个功能可能是由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免责声明——我实际上并没有给回答者加分的超能力;-)