Размещение пикселей на сетке

У меня есть двумерный массив numpy: myarray=[[0,0],[1,1],[2,2]] Еще у меня есть сетка точек: mygrid=[[70,70],[100,100],[30,30]]

Я хочу эффективно создать новый массив, содержащий точки myarrray, добавленные в сетку:

desired_result=[[70,70],[71,71],[72,72],[100,100],[101,101],[102,102],[30,30],[31,31],[32,32]]

Можно представить себе размещение 1x3 пиксельного блока на позициях сетки. Если я работаю с матрицей, состоящей из np.ones(dimensions), замена единиц на нули вместо desired_result создает сетку из 1x3 блоков пикселей. Можно использовать координаты, описывающие круг/геометрическую фигуру в месте myarray, что затем создаст сетку из кругов/геометрических фигур.

Какой у вас вопрос по программированию по этому поводу?

mkrieger1 06.07.2024 14:26

Я не понимаю, в чем проблема.

furas 06.07.2024 14:33

Должен добавить, что, как и другие, я не вижу связи между преамбулой (кругом) и вопросом. Я все равно ответил (хотя обычно я не отвечаю на вопрос, пока он не будет полностью разъяснен), потому что единственный реальный вопрос здесь - это тот, на который я тоже ответил (остальные кажутся неуместными и непонятными, если честно, элементы контекста). Вам следует удалить ненужные элементы контекста, то есть удалить ссылки на круги.

chrslg 06.07.2024 14:43

Разве здесь еще и вопрос про круги? В этом случае будет два разных вопроса (поскольку тот, на который я ответил, является независимым). В таком случае, если у вас есть 2 вопроса (один про круги, другой про добавление точек в сетку), вам следует задать их в 2 отдельных постах (и уточнить вопрос про круг, потому что он действительно не понятен. Могу только предполагать). речь идет о том, "как заполнить экран кругами, центры которых находятся на карте", но вы этого не сказали)

chrslg 06.07.2024 14:43

@chrslg Я думаю, что в предполагаемом приложении myarray состоит из точек, образующих круг, а mygrid — это «черный холст», а желаемый результат — это сетка из кругов. Я не вижу другого способа осмыслить ответ. Хороший ответ, кстати (+1)

John Coleman 06.07.2024 14:51

@JohnColeman действительно может быть. Моя гипотеза заключалась в том, что myarray — это список центров (например, «карта» в первой части), а mygrid — это пример круга (то же самое, что myarray в вашей гипотезе). Итак, result=myarray[None,...]+mygrid[:,None,:] — это список координат всех точек всех окружностей, центры которых являются одним из myarray. А затем оставшимся этапом было бы использовать это как индекс для «рисования» screen. screen[(xy[:,1], xy[:,0])]=0 например.

chrslg 06.07.2024 15:02

Я должен сказать, что вы, ребята, очень умны, что догадались, когда мой вопрос сформулирован так хахахахахахахаха

100xln2 06.07.2024 15:11
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
7
60
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

На последнюю часть вопроса ответ однозначен. Для этого и существует вещание

myarray=[[0,0],[1,1],[2,2]] 
mygrid=[[70,70],[100,100],[30,30]]
result = (np.array(myarray)[None,:,:] + np.array(mygrid)[:,None,:]).reshape(-1,2)

Некоторые пояснения:
A=np.array(myarray)[None,:,:] — это [[[0,0],[1,1],[2,2]]], то есть трёхмерный массив, первое измерение которого имеет только 1 элемент (сам myarray). Итак, массив 1×3×2, например A[0,i,j] = myarray[i,j]
B=np.array(mygrid)[:,None,:] равно [[[70,70]],[[100,100]],[[30,30]]], то есть трехмерный массив, второе измерение которого каждый раз содержит только 1 элемент. Итак, массив 3×1×2, например B[i,0,j] = mygrid[i,j].

А из-за широковещательной передачи добавление массива X размера 1 к массиву Y размера n добавляет элемент в каждый из n элементов Y (array([12]) + array([10,20,30]) — это array([22,32,42])), и для каждой оси результатом A+B является 3× Массив 3×2, элемент (A+B)[i,j,k] которого равен A[0,j,k]+B[i,0,k] = myarray[j,k]+mygrid[i,k]. Итак, что вы хотите, или почти так.

Вы хотите, чтобы они располагались последовательно, то есть массивом 9×2. Это достигается путем преобразования результата в форму 9×2 (я использовал фигуру -1×2, поскольку мне разрешено заменять один из размеров на -1, который затем вычисляется автоматически. Итак, я слишком ленив, чтобы вычислить общий размер, len(mygrid)*len(myarray), и поскольку 2 здесь является константой, было легко полагаться просто на -1.

да, я пытался правильно сформулировать вопросы и начал с полной проблемы (которая, как вы и предполагали, касается кругов), но потом я понял, что проще было бы просто объяснить в терминах пикселей, что я и сделал, но забыл удалите первую часть. Я редактирую вопрос, чтобы это имело смысл. Спасибо за отличный ответ!

100xln2 06.07.2024 15:03

Другие вопросы по теме