将2D numpy数组的值分配为索引的有效方法是什么

时间:2019-06-05 13:05:32

标签: python arrays function numpy

这可能是一个愚蠢的问题,但我暂时找不到类似的问题。 例如,我定义为函数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数组。

1 个答案:

答案 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]])