如何从数字列表中创建数字符号的列表/数组

时间:2018-10-19 13:47:14

标签: python numpy

我有一个数字数组:

n =  [ 1.2,0,-0.5,0.3,0,-0.8]

我想使用上述方法创建一个仅包含数字符号的numpy数组,结果应为:

s = [1,0,-1,1,0,-1]

我可以使用循环创建它:

s= np.zeros(n.shape[0])    
for i in range (n.shape[0]):
    if n[i]>0: s[i]=1
    if n[i]<0: s[i]=-1    

有没有一种方法可以将列表推导与numpy数组结合使用,从而可以实现高性能?

2 个答案:

答案 0 :(得分:7)

如果您使用的是numpy,则更好的解决方案是使用numpy.sign():

import numpy as np
s = np.sign(n)

这将为您提供一个numpy数组。

  

array([1.,0.,-1。,1.,0.,-1。])

要将此浮点结果转换为int,可以使用:

s.astype(np.int)

如果要将其转换回python列表:

s_list = s.tolist()

您可以一行完成上述操作:

s = np.sign(n).astype(np.int).tolist()

答案 1 :(得分:0)

np.sign答案似乎是最好的方法,但是如果您要编写代码,我觉得这应该很快:

import numpy as np

def get_signs(array_of_numbers):
    f = lambda x: x and (1, -1)[x < 0]
    return np.fromiter((f(item) for item in array_of_numbers), array_of_numbers.dtype)