将两个函数应用于numpy数组的两半

时间:2011-12-18 20:04:08

标签: python arrays numpy

我试图找到如何将两个函数应用于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数组的新手。 谢谢

2 个答案:

答案 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. 使用deepcopy方法可以清楚地表明您打算进行深度复制而不是引用复制
  2. 所有python的数据类型都不支持复制方法。 Numpy拥有它并且它有好处,但是当您使用numpy和python编程时,您最终可能会使用各种numpy和非numpy数据类型,并非所有这些都支持复制方法。为了保持一致,我宁愿使用第一个。

答案 1 :(得分:2)

使用a复制NumPy数组a.copy()。但是,在您的应用程序中,无需复制旧数据。你需要的只是一个与旧的相同形状和类型的新数组。你可以使用

result = numpy.empty_like(xs)

创建这样的数组。如果您通常不希望函数修改其参数,则应在函数内部执行此操作,而不是要求调用者处理此问题。