这可能是一个愚蠢的问题,但我暂时找不到类似的问题。 例如,我定义为函数f(x,y)
def f(x, y):
return x+y
现在我要输出一个2D numpy数组,例如,如果我想要一个2x2数组,则元素的值等于其索引的总和:
arr = [[0, 1],
[1, 2]]
如果我想要一个3x3数组,那么输出应该是:
arr = [[0, 1, 2],
[1, 2, 3],
[2, 3, 4]]
逐个分配值效率不高,尤其是在数组大小较大(例如10000 * 10000)的情况下,这也浪费了numpy的快速速度。尽管这听起来很基础,但是我想不出一个简单快捷的解决方案。最常见和最有效的方法是什么?
顺便说一下,求和索引只是一个例子。我希望该方法也可以推广到任意函数,例如,
def f(x,y):
return np.cos(x)+np.sin(y)
甚至是更高维度的数组,例如4x4数组。
答案 0 :(得分:1)
您可以使用numpy.indices
,它返回一个表示网格索引的数组;您只需要沿0轴求和:
>>> a = np.random.random((2,2))
>>> np.indices(a.shape).sum(axis=0) # array([[0, 1], [1, 2]])
>>> a = np.random.random((3,3))
>>> np.indices((3,3)).sum(axis=0) #array([[0, 1, 2], [1, 2, 3], [2, 3, 4]])