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.
3 Réponses :
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])
Cela ne semble pas être ce que je recherche
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)
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)
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 :)