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

2024-04-20 13:30:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图找到如何将两个函数应用到一个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阵列。 谢谢


Tags: 函数代码numpylogdefnpabssqrt
2条回答

在调用函数之前,请尝试copy.deepcopy将数组b复制到a。你知道吗

import copy
a = copy.deepcopy(b)
c = hybrid_array(a,args)

或者,可以使用数组的copy方法

a = b.copy()
c = hybrid_array(a,args)

注***

您可能想知道,为什么尽管使用numpy array的copy方法复制数组更简单,我还是介绍了复制.deepcopy. 其他人可能不同意,但我的理由是

  1. 使用deepcopy方法可以清楚地表明您打算执行deepcopy而不是reference copy
  2. 所有python的数据类型都不支持copy方法。Numpy有它的优点,但是当您使用Numpy和python编程时,您可能会使用各种Numpy和非Numpy数据类型,而不是所有这些类型都支持copy方法。为了保持一致,我宁愿使用第一个。你知道吗

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

result = numpy.empty_like(xs)

创建这样一个数组。如果通常不希望函数修改其参数,则应在函数内部执行此操作,而不是要求调用方处理此操作。你知道吗

相关问题 更多 >