我试图找到如何将两个函数应用于numpy数组,每个函数只有一半的值。 这是我一直在尝试的代码
def hybrid_array(xs,height,center,fwhh):
xs[xs<=center] = height*np.exp((-(xs[xs<=center]-center)**2)/(2*(fwhh/(2*np.sqrt(2*np.log(2))))**2))
xs[xs>center] = height*1/(np.abs(1+((center-xs[xs>center])/(fwhh/2))**2))
return xs
但是我覆盖了传递给参数的初始数组。用切片复制它的常用技巧即。以下内容仍然有所改变b。
a = b[:]
c = hybrid_array(a,args)
如果有更好的方法来完成我正在尝试的任何部分,我将非常感激,如果你能让我知道,因为我仍然是numpy数组的新手。 谢谢
答案 0 :(得分:3)
在调用您的函数之前,请尝试copy.deepcopy将数组b
复制到a
。
import copy
a = copy.deepcopy(b)
c = hybrid_array(a,args)
或者,您可以使用数组的复制方法
a = b.copy()
c = hybrid_array(a,args)
请注意***
您可能想知道,为什么尽管使用numpy数组的复制方法复制数组更简单,但我引入了copy.deepcopy。其他人可能不同意,但这是我的推理
答案 1 :(得分:2)
使用a
复制NumPy数组a.copy()
。但是,在您的应用程序中,无需复制旧数据。你需要的只是一个与旧的相同形状和类型的新数组。你可以使用
result = numpy.empty_like(xs)
创建这样的数组。如果您通常不希望函数修改其参数,则应在函数内部执行此操作,而不是要求调用者处理此问题。