3 votes

Comment répéter des éléments spécifiques dans un tableau numpy ?

J'ai un tableau a et je voudrais répéter les éléments de a n fois s'ils sont pairs ou s'ils sont positifs. Je veux dire que je veux répéter seulement les éléments qui respectent une certaine condition.

Si a=[1,2,3,4,5] y n=2 et la condition est égale, alors je veux a à être a=[1,2,2,3,4,4,5] .

2voto

Andy L. Points 11730

Une solution numpy. Utilisez np.clip y 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])

Ou vous pouvez utiliser numpy ndarray.clip au lieu de np.clip pour une commande plus courte

m = np.repeat(a, (cond * n).clip(min=1))

1voto

diegog Points 91

Essayez un simple for-loop :

>>> 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]

1voto

lostin Points 700

Le tableau ci-dessous correspond à ce que vous recherchez.

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])

1voto

stevemo Points 947

Utilisation de 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]

(L'embarrassant repeat(x,1) est d'autoriser l'utilisation de chain et éviter d'avoir à aplatir un tableau de mélange d'entiers et de générateurs...)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X