在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-D数组“广播”到2-D。 由于似乎很重要,我的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)
etc.
1免责声明--我实际上没有SO超能力来赋予回答者额外加分;-)