Python 高效地逼近数组
我有一个表单数组Python 高效地逼近数组,python,numpy,Python,Numpy,我有一个表单数组 [-0.87336,0.18776,1.00000,0.56449,-0.27645] [-1.0,0.0,1.0,1.0,0.0] 我想把它转换成一个数组的形式 [-0.87336,0.18776,1.00000,0.56449,-0.27645] [-1.0,0.0,1.0,1.0,0.0] 遵循这样一条规则:如果初始数组的元素i小于或等于-0.5,则为其分配数字-1.0;如果在区间(-0.5,0.5)内,则为其指定值0.0,最后,如果大于或等于0.5,则为其指定值
[-0.87336,0.18776,1.00000,0.56449,-0.27645]
[-1.0,0.0,1.0,1.0,0.0]
我想把它转换成一个数组的形式
[-0.87336,0.18776,1.00000,0.56449,-0.27645]
[-1.0,0.0,1.0,1.0,0.0]
遵循这样一条规则:如果初始数组的元素i小于或等于-0.5,则为其分配数字-1.0;如果在区间(-0.5,0.5)内,则为其指定值0.0,最后,如果大于或等于0.5,则为其指定值1.0
我试着定义一个函数
def modulator(x):
if -0.5<x<0.5:
return 0
elif 0.5<=x:
return 1
else:
return -1
有没有更优雅的蟒蛇式方法?
我考虑过np.where(),但我不知道如何处理多个条件。您可以使用内置函数来实现这一点
lst = [-0.87336,0.18776,1.00000,0.56449,-0.27645]
lst= [float(round(i)) for i in lst]
在numpy中,您可以使用
np.round
:
x = np.array([-0.87336,0.18776,1.00000,0.56449,-0.27645])
x.round()
其中:
array([-1., 0., 1., 1., -0.])
如果您不喜欢-0.
,可以添加0.
:
x.round() + 0.
array([-1., 0., 1., 1., 0.])
如果您的输入超出了round
将直接起作用的范围(即示例中的值介于-1和+1之间,但如果它们远远超出此范围),您可以首先使用clip
:
x = np.array([-2.87336, -.501, 7.18776, 99.00000, 0.499, 0.56449,-87.27645])
np.round( np.clip(x, -1, 1)) + 0.
array([-1., -1., 1., 1., 0., 1., -1.])
作为检查,我运行了以下内容以覆盖我不确定的边界:
x = np.array([-0.87336, -.501, -.499, 0.18776, 1.00000, 0.499, 0.56449,-0.27645])
array([-1., -1., 0., 0., 1., 0., 1., 0.])
您可以使用
np。选择(这将在舍入失败时处理大于1和小于-1的值):
a=np.数组([-0.87336,0.18776,1.00000,0.56449,-0.27645])
np.选择((a=0.5),(-1.0,1.0),0.0)
#[-1. 0. 1. 1. 0.]
您有numpy
标签。它是一个列表还是一个numpy数组?也许你正在寻找的是np.round()
。虽然他的代码片段是列表,但我认为他的实际应用程序使用的是numpy数组。如果它是一个numpy数组,而你不会在numpy中使用显式循环,那么修改他的代码来使用它应该不会那么困难,对吗?
a = np.array([-0.87336,0.18776,1.00000,0.56449,-0.27645])
np.select((a<=-0.5, a>=0.5),(-1.0,1.0),0.0)
#[-1. 0. 1. 1. 0.]