0
votes

NumPy - générer plusieurs intervalles

J'ai un tableau comme celui-ci:

[[0, 0.12],
[0.13, 0.19],
[0.20, 0.24],
[0.25, 0.60],
[0.61, 0.69],
[0.70, 0.89],
[0.90, 1]]

Je veux, étant donné le tableau ci-dessus, créer un résultat comme celui-ci:

[[0.13, 0.19],
[0.25, 0.6 ],
[0.7 , 0.89]]

À savoir, je veux créer une matrice totale d'intervalles, étant donné un intervalle prédéfini.


2 commentaires

Qu'avez-vous tenté? Il n'a pas besoin d'être "vectorisé" mais il doit être clair et reproductible. Nous ne devrions pas avoir à en déduire un modèle.


Je ne sais pas comment créer ces intervalles. C'est pourquoi je demande ici :)


3 Réponses :


-2
votes

Vous pouvez utiliser linspace pour créer vos intervalles

import numpy as np 
>>> np.linspace(0, 1, num=3, endpoint=False)
array([0.        , 0.33333333, 0.66666667])


1 commentaires

Cela ne semble pas être ce que je recherche



0
votes

Ce n'est pas spécifique à numpy, mais peut-être que cela vous dirigera dans la bonne direction.

Fondamentalement, vous devez savoir par où commencer, où se terminer et la «résolution» (faute d'un meilleur mot) - à quelle distance les écarts sont. Avec cela, vous pouvez parcourir les intervalles existants et remplir les autres. Vous voudrez regarder les cas extrêmes où les intervalles sont déjà remplis - comme celui commençant par 0 ou [0.6, 0.8], [0.9, 0.95] afin de ne pas les remplir deux fois. Cela pourrait ressembler à quelque chose comme:

[[0, 0.12],
 [0.13, 0.19],
 [0.2, 0.24],
 [0.25, 0.6],
 [0.61, 0.69],
 [0.7, 0.89],
 [0.9, 1.0]]

Retour:

def fill_intervals(existing_intervals, start=0, end=1.0, inc=0.01):
    l2 = []
    for i in l:
        if start < i[0]: 
            l2.append([start, i[0] - inc])
        l2.append(i)
        start = i[1] + inc
    if start < end:
        l2.append([start, end])   
        
    return l2

l = [
    [0.13, 0.19],
    [0.25, 0.6 ],
    [0.7 , 0.89]
]

fill_intervals(l)


0 commentaires

0
votes

Vous pouvez dupliquer des éléments puis les rendre assez proches:

array([[0.  , 0.12],
       [0.13, 0.19],
       [0.2 , 0.24],
       [0.25, 0.6 ],
       [0.61, 0.69],
       [0.7 , 0.89],
       [0.9 , 1.  ]])

intervals :

intervals[2::2,0] = intervals[2::2,0] + 0.01
intervals[:-1:2,1] = intervals[:-1:2,1] - 0.01

Il semble que vous deviez corriger des intervalles alternatifs, alors faites simplement:

array([[0.  , 0.13], # required: [0, 0.12]
       [0.13, 0.19], # OK
       [0.19, 0.25], # required: [0.20, 0.24]
       [0.25, 0.6 ], # OK
       [0.6 , 0.7 ], # required: [0.61, 0.69]
       [0.7 , 0.89], # OK
       [0.89, 1.  ]])# required: [0.9, 1]

intervals :

arr = np.array([[0.13, 0.19], [0.25, 0.6 ], [0.7 , 0.89]])
consecutive = np.r_[0, np.repeat(arr, 2), 1]
intervals = consecutive.reshape(-1, 2)


0 commentaires