Python 函数和numpy数组预分配
如何优化涉及numpy阵列的函数 用例:Python 函数和numpy数组预分配,python,performance,function,numpy,Python,Performance,Function,Numpy,如何优化涉及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 = 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)
如果我理解你的要求,你可以这样做:
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
但是,如果希望函数以任何方式工作(使用给定的“out”数组或创建新数组),则必须更改函数。如果您在创建新数组的函数中编写代码,那么没有神奇的方法可以让它不执行该代码,因为您已经预先创建了另一个数组。您必须编辑函数。这取决于函数。如果函数设置为允许传递预分配数组,则可以将预分配数组传递给该函数。你需要更具体才能得到更具体的答案。如果需要,我可以更改函数签名,但我该怎么做呢?