/ / Създаване на масив от X по Y от (a, b) точки в Python 2.7 - python, масиви, numpy

Създаване на масив с размери X от Y с (a, b) точки в Python 2.7 - python, масиви, numpy

Странно биех главата си срещу този проблем в продължение на няколко часа и ще се радвам на всяка помощ!

Бих искал да създам (например) масив 100x100, в който всеки индекс е a (x,y) координират. Общата цел тук е следната:

Имам x, y координати и бих искал да ги подредя в 2D пространство, така че да мога да използвам np.diagonal функция за връщане на (x,y) координати по права линия. След това ще ги използвам (x,y) точки за сравняване на определени стойности.

Първата стъпка тук всъщност е създаването на масива и просто не мога да изглежда.

Отговори:

1 за отговор № 1

Ако просто искате стойностите по диагонала, защо просто не създавате 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)

Вече не се нуждаете от 2d масива и след това се обаждате по диагонала.


1 за отговор № 2

Работа по предложението на Хайме:

>>> x, y = numpy.mgrid[0:100, 0:100]
>>> z = numpy.array([x, y]).transpose([1,2,0])
>>> z[50, 2]
array([50,  2])

EDIT: Като се има предвид масив от точки p от формата (2, P), по този начин ще разберете коя от тези точки е под диагонал 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]

(Предпочитам да работя с „good_indices“, т.е. да пиша неща като p [:, good_indices], а не с пълния набор от масиви, които numpy.where връща обратно).


0 за отговор № 3

Не съм сигурен в тъпата част на вашата заявка, но можете да създадете масива така:

coords = [[(y,x) for x in range(100)] for y in range(100)]
>>> coords[50][2]
(50,2)