J'ai un tableau numpy comme les coordonnées XY ci-dessous:

2d_coords = [
[1,2]
[1,1]
[2,1]
[3,1]
...
]

Soit [1,1] ou [1,2] doivent aller (peu importe lequel), un seul point sur la coordonnée X est possible. Comment puis je faire ça ?

0
DB3D 24 janv. 2021 à 14:52

4 réponses

Meilleure réponse

numpy.unique serait utile. Par exemple,

import numpy as np

l = np.asarray([
    [1, 2],
    [1, 1],
    [2, 1],
    [3, 1],
])

_, unique_indices = np.unique(l[:, 0], return_index=True)  # get the indices with unique x coordinates
print(l[unique_indices])

L'exemple de sortie:

[[1 2]
 [2 1]
 [3 1]]
2
Chris Tang 24 janv. 2021 à 12:09

Vous pouvez utiliser NumPy et matplotlib:

import numpy as np
import matplotlib.pyplot as plt

coords = np.array([[1, 2], [1, 1], [2, 1], [3, 1]])
plot_coords = coords[np.unique(coords[:,0])].T

plt.plot(plot_coords[0], plot_coords[1])
plt.show()
1
Pablo C 24 janv. 2021 à 12:17

Et les pandas?

pd.DataFrame(coords).drop_duplicates(0).values

array([[1, 2],
       [2, 1],
       [3, 1]])
1
ansev 24 janv. 2021 à 12:19

Sans utiliser de bibliothèque externe, vous pouvez utiliser une compréhension de liste conditionnelle:

d_coords = [[1,2],[1,1],[2,1],[3,1]]

new_list = [d_coords[i] for i in range(len(d_coords)) if d_coords[i][0] not in [k[0] for k in d_coords[:i]]]

# new_list: [[1, 2], [2, 1], [3, 1]]

REMARQUE: ne commencez pas les noms de variables par des nombres

1
frab 24 janv. 2021 à 12:39
65870206