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; icitoutが指定されていれば、代わりにNoneを返すように簡単に変更できます。

ただし、いずれかの方法で機能させる場合は、関数を変更する必要があります(特定の「出力」配列を使用するか、新しい配列を作成します)。新しい配列を作成する関数でコードを記述した場合、別の配列が事前に作成されているという理由だけで、そのコードを実行しないようにする魔法の方法はありません。関数を編集する必要があります。

于 2013-03-03T01:52:49.683 に答える