2

如何优化涉及 numpy 数组的函数?

用例:

def create_array_and_fill(a, b, N):
    res = np.zeros(N, N)

    res[0] = a
    res[-1] = b

    return res

c = create_array_and_fill(5, 9, 100)

但是,有时,我事先知道我需要使用的所有数组的最大大小(例如用于测试目的),那么最好的方法是什么?我应该预先分配吗?最好的方法是什么?例如,我可以将一个预先分配的数组传递给一个函数,以便该函数只更新它而不是返回一个新数组吗?

我的第一个想法如下,但当然,这是有代价的,我现在必须更改所有函数签名。

def create_array_and_fill(a, b, N, res):

    res[0] = a
    res[-1] = b

    # No more return here?

c = np.zeros(N, N)
create_array_and_fill(a, b, N, c) 
4

1 回答 1

2

如果我明白你在问什么,你可以这样做:

def fill_array(a, b, N, out=None):
    if out is None:
        out = np.zeros(N, N)
    out[0] = a
    out[-1] = b
    return out

如果提供了一个对象,这会修改out对象,如果没有提供,则返回一个新对象out。在这种情况下,即使修改现有值,它仍然返回值,但是如果提供了 expl;icit,您可以轻松地将其修改为返回 None out

但是,是的,如果您希望它们以任何一种方式工作(使用给定的“输出”数组或创建新数组),您将不得不更改您的函数。如果您在创建新数组的函数中编写代码,则没有神奇的方法可以让它不执行该代码,因为您预先创建了另一个数组。您必须编辑您的功能。

于 2013-03-03T01:52:49.683 回答