Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 高效地逼近数组_Python_Numpy - Fatal编程技术网

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.]