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