как создать список / массив знаков числа из списка чисел - PullRequest
0 голосов
/ 19 октября 2018

У меня есть числовой массив чисел:

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

Я хочу создать числовой массив, используя приведенное выше, который содержит только знак чисел, результат должен быть:

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    

Есть ли способ использовать списочное восприятие с массивными массивами, которые могут сделать то же самое с высокой производительностью?

Ответы [ 2 ]

0 голосов
/ 19 октября 2018

Ответ 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)
0 голосов
/ 19 октября 2018

Если вы используете 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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...