【发布时间】:2013-02-03 02:49:43
【问题描述】:
在 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免责声明——我实际上并没有给回答者加分的超能力;-)
【问题讨论】:
-
@HighPerformanceMark -- 这是一个很好的观点。也许我会。 (我没有想到,因为我以前从来没有这样做过)
标签: python arrays numpy fortran array-broadcasting