Как повторить указанные c элементы в массиве numpy? - PullRequest
2 голосов
/ 25 апреля 2020

У меня есть массив a, и я хотел бы повторить элементы a n раз, если они четные или положительные. Я имею в виду, что хочу повторить только те элементы, которые соответствуют некоторому условию.

Если a=[1,2,3,4,5] и n=2 и условие четное, тогда я хочу, чтобы a было a=[1,2,2,3,4,4,5].

Ответы [ 4 ]

1 голос
/ 25 апреля 2020

a numpy решение. Используйте np.clip и np.repeat

n = 2
a = np.asarray([1,2,3,4,5])
cond = (a % 2) == 0  #condition is True on even numbers

m = np.repeat(a, np.clip(cond * n, a_min=1, a_max=None))

In [124]: m
Out[124]: array([1, 2, 2, 3, 4, 4, 5])

Или вы можете использовать numpy ndarray.clip вместо np.clip для более короткой команды

m = np.repeat(a, (cond * n).clip(min=1))
1 голос
/ 25 апреля 2020

Ниже будет делать то, что вы ищете -

import numpy as np
a = np.asarray([1,2,3,4,5])

n = int(input("Enter value of n "))

new_array = []

for i in range(0,len(a)):
    counter = np.count_nonzero(a == a[i])
    if a[i]%2 != 0:
        new_array.append(a[i])
    elif a[i]>0 and a[i]%2 == 0:
        for j in np.arange(1,n+1):
            new_array.append(a[i])
1 голос
/ 25 апреля 2020

Использование itertools,

a = [1,2,3,4,5]
n = 2

# this can be any condition. E.g., even only
cond = lambda x: x % 2 == 0

b = list(itertools.chain.from_iterable( \
    (itertools.repeat(x, n) if cond(x) else itertools.repeat(x,1)) \
    for x in a))
b
# [1, 1, 2, 2, 3, 3, 4, 4, 5, 5]

(Неловко repeat(x,1) - разрешить использование chain и избежать сглаживания массива смешанных целых чисел и генераторов. ..)

1 голос
/ 25 апреля 2020

Попробуйте простую форму -l oop:

>>> a = [1,2,3,4,5]
>>> new_a = []
>>> n = 2
>>> 
>>> for num in a:
...     new_a.append(num)
...     if num % 2 == 0:
...         for i in range(n-1):
...             new_a.append(num)
... 
>>> new_a
[1, 2, 2, 3, 4, 4, 5]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...