我有一个数字数组:
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数组结合使用,从而可以实现高性能?
答案 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)