Хобрук: Ваш путь к мастерству в программировании

Numpy: выбрать все строки и столбцы из массива

Я надеялся, что решу эту проблему до того, как закончу пост, но вот оно:

У меня есть массив array1 формы (4808L, 5135L), и я пытаюсь выбрать прямоугольное подмножество массива. В частности, я пытаюсь выбрать все значения в строках 4460:4807 и все значения в столбцах 2718:2967.

Для начала я создаю маску той же формы, что и array1, например:

mask = np.zeros(array1.shape[:2], dtype = "uint8")
mask[array1== 399] = 255

Затем я пытаюсь найти индекс точек, где mask = 255:

true_points = np.argwhere(mask)
top_left = true_points.min(axis=0)
# take the largest points and use them as the bottom right of your crop
bottom_right = true_points.max(axis=0)
cmask = mask[top_left[0]:bottom_right[0]+1, top_left[1]:bottom_right[1]+1]

Где: верхний_левый = массив([4460, 2718], dtype=int64) нижний_правый = массив([4807, 2967], dtype=int64)

cmask выглядит правильно. Затем, используя top_left и bottom_right, я пытаюсь создать подмножество array1, используя:

crop_array = array1[top_left[0]:bottom_right[0]+1, top_left[1]:bottom_right[1]+1]

Это приводит к тому, что crop_array имеет ту же форму, что и cmask, но значения заполняются неправильно. Поскольку cmask[0][0] = 0 я ожидаю, что crop_array[0][0] также будет равно нулю.

Как заполнить crop_array значениями из array1, сохранив при этом структуру cmask?

Заранее спасибо.


  • Не совсем понял тебя. Зачем вам 4460 с одной стороны и 4417 с другой? 29.01.2017
  • @Psidom Они оба из маски. 4460 — это минимальный индекс столбца, в котором я нахожу желаемое значение. 4417 — это столбец, связанный с минимальным индексом строки, где я нахожу желаемое значение. 29.01.2017

Ответы:


1

Если я правильно понял ваш вопрос, вы ищете . метод копирования(). Пример, соответствующий вашим индексам и переменным:

import numpy as np

array1 = np.random.rand(4808,5135)
crop_array = array1[4417:,2718:2967].copy()

assert np.all(np.equal(array1[4417:,2718:2967], crop_array)) == True, (
    'Equality Failed'
)
29.01.2017
  • Спасибо за ответ. Мои проблемы были чем-то другим, но ваше решение относилось к моему оригинальному сообщению. 30.01.2017
  • Новые материалы

    React on Rails
    Основное приложение Reverb - это всеми любимый монолит Rails. Он отлично обслуживает наш API и уровень просмотра трафика. По мере роста мы добавляли больше интерактивных элементов..

    Что такое гибкие методологии разработки программного обеспечения
    Что представляют собой гибкие методологии разработки программного обеспечения в 2023 году Agile-методологии разработки программного обеспечения заключаются в следующем: И. Введение A...

    Ториго  — революция в игре Го
    Наш следующий вызов против ИИ и для ИИ. Сможет ли он победить людей в обновленной игре Го? Обратите внимание, что в следующей статье AI означает искусственный интеллект, а Goban  —..

    Простое развертывание моделей с помощью Mlflow — Упаковка классификатора обзоров продуктов NLP от HuggingFace
    Как сохранить свои модели машинного обучения в формате с открытым исходным кодом с помощью MLFlow, чтобы позже получить возможность легкого развертывания. Сегодня модели упаковки имеют несколько..

    Математика и интуиция - Часть 1
    У каждой математической формулы есть доказательство. Часто эти доказательства слишком сложно понять, поскольку многие из них основаны на индукции, некоторые - на очень сложных наблюдениях, а..

    Раскрытие возможностей НЛП: часть речевой маркировки и ее проблемы
    В сфере обработки естественного языка (NLP) маркировка частей речи (POS) выступает в качестве фундаментального метода, позволяющего компьютерам понимать и анализировать человеческий язык на..

    Под поверхностью: раскрытие деталей системы с помощью инструментов Linux CLI
    Чем больше вы изучаете Linux и продвигаетесь вперед, тем больше вам нужно проверять информацию о вашей системе. Эта информация может касаться аппаратного обеспечения, такого как процессор,..