¡He estado extrañamente golpeando mi cabeza contra este problema durante varias horas, y agradecería cualquier ayuda!
Me gustaría crear una matriz (por ejemplo) de 100x100 en la que cada índice sea un (x,y)
coordinar. El objetivo general aquí es el siguiente:
Tengo coordenadas x, y, y me gustaría organizarlas en un espacio 2D para que pueda usar el np.diagonal
función para devolver el (x,y)
coordenadas a lo largo de una línea. Yo entonces usaré esos (x,y)
Puntos para comparar valores particulares.
El primer paso aquí es, en realidad, crear la matriz y parece que no puedo hacerlo.
Respuestas
1 para la respuesta № 1Si solo desea los valores a lo largo de la diagonal, ¿por qué no crea una lista 1D?
import numpy as np
xs = np.linspace(1,10,100) # assuming x goes form 1 to 10
ys = np.linspace(2,3, 100) # assuming y goes from 2 to 3
xy = zip(xs, ys)
Ya no necesitas la matriz 2d y luego llamas a la diagonal.
1 para la respuesta № 2
Trabajando en la sugerencia de Jaime:
>>> x, y = numpy.mgrid[0:100, 0:100]
>>> z = numpy.array([x, y]).transpose([1,2,0])
>>> z[50, 2]
array([50, 2])
EDITAR: Dada una serie de puntos p, de la forma (2, P), esta es la forma en que descubriría cuáles de estos puntos están debajo de la diagonal n:
>>> d = numpy.diagonal(z, n)
>>> cond0 = p[0, None] < d[0, :, None]
>>> cond1 = p[1, None] < d[1, :, None]
>>> good_indices_full = numpy.where(numpy.logical_and(cond0, cond1))
>>> good_indices = good_indices_full[1]
(Prefiero trabajar con "good_indices", es decir, escribir cosas como p [:, good_indices], en lugar de la tupla completa de matrices que numpy.where devuelve).
0 para la respuesta № 3
No estoy seguro de la parte numpy de su solicitud, pero puede crear la matriz de esta manera:
coords = [[(y,x) for x in range(100)] for y in range(100)]
>>> coords[50][2]
(50,2)