繁体   English   中英

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

[英]how to create a list/array of number's signs from a list of numbers

我有一大堆数字:

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数组,可以做同样的高性能?

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

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

这会给你一个numpy数组。

数组([1.,0.,-1。,1.,0.,-1。])

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

s.astype(np.int)

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

s_list = s.tolist()

您可以在一行中执行以上操作:

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

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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM