Как получить список уникальных значений в выводе функции - PullRequest
0 голосов
/ 23 марта 2020

Скажем, у меня есть такая функция:

def function(a,b):
    for x in np.nditer(a):
        dAB = x-b
        pred = np.ceil([dAB+b*2])
        print(pred)

и

array1 = np.array([1,2,3,4,5])
array2 = np.array([4,5,6,7,8])

Мой вывод:

function(array1,array2)

[[5. 6. 7. 8. 9.]]
[[ 6.  7.  8.  9. 10.]]
[[ 7.  8.  9. 10. 11.]]
[[ 8.  9. 10. 11. 12.]]
[[ 9. 10. 11. 12. 13.]]

Как бы получить вывод как :

function(array1,array2)

array([5,6,7,8,9,10,11,12,13])

Я бы хотел взять все уникальные значения в массивах и поместить их в один массив.

Ответы [ 3 ]

1 голос
/ 23 марта 2020

вы можете использовать np.unique:

def function(a,b):
    return np.unique([np.ceil([(x-b)+b*2]) for x in np.nditer(a)])

вывод:

array([ 5.,  6.,  7.,  8.,  9., 10., 11., 12., 13.])
1 голос
/ 23 марта 2020

Вы можете сравнить array1 и array2 напрямую с:

In [249]: np.ceil((array1[:,None]-array2)+array2*2)                                                                  
Out[249]: 
array([[ 5.,  6.,  7.,  8.,  9.],
       [ 6.,  7.,  8.,  9., 10.],
       [ 7.,  8.,  9., 10., 11.],
       [ 8.,  9., 10., 11., 12.],
       [ 9., 10., 11., 12., 13.]])

и получить значения unique из этого:

In [250]: np.unique(np.ceil((array1[:,None]-array2)+array2*2))                                                       
Out[250]: array([ 5.,  6.,  7.,  8.,  9., 10., 11., 12., 13.])
1 голос
/ 23 марта 2020

Просто используйте set:

import numpy as np

def function(a,b):
    res = set()
    for x in np.nditer(a):
        dAB = x-b
        pred = np.ceil(dAB+b*2)
        res.update(pred)
    return np.array(res)

Пример.

>>> array1 = np.array([1,2,3,4,5])
>>> array2 = np.array([4,5,6,7,8])

>>> print(function(array1,array2))
{5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0, 13.0}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...