Ответы пользователя по тегу NumPy
  • Как написать след код без циклов и генераторов?

    Vindicar
    @Vindicar
    Если я правильно понял решаемую задачу, то polyfit()
    Ответ написан
  • Почему в numpy берется только тонкая полоска изображения?

    Vindicar
    @Vindicar
    Погоди, а что за ересь ты вообще творишь?
    im = Image.open('IMG_7760.JPG')
    a = np.asarray(im) # a - трёхмерный массив numpy (высота; ширина; каналы)
    
    for bb in a: # перебираешь элементы по первому индексу (высоте), т.е. строки изображения
        np.random.random((1,1,1)) * a #умножаешь каждый элемент (кортеж RGB) строки на одно и то же случайное число
        #и всё. Полученное произведение выбрасывается за ненадобностью. Оригинальное значение ты не заменяешь ведь.
        im = Image.fromarray(bb) #*строку* превращаешь в объект PIL.Image
        im.save('2222.JPG') #и сохраняешь этот объект в файл
        print(bb) #и выводишь на экран

    Питон делает ровно то, что ты у него просишь.
    Ответ написан
  • Python/numpy: как увеличить массив на одну строку без использования дополнительной памяти?

    Vindicar
    @Vindicar
    Нельзя. В этом и состоит отличие массива от списка. Список легче растянуть, чем массив, так как массив хранит все свои данные одним блоком, а список хранит одним блоком только ссылки на свои элементы.
    Нужно либо выделять массив с запасом, либо сбрасывать данные на диск для последующего чтения в numpy-массив.
    Ответ написан
    1 комментарий
  • Как найти значения производных созданного массива numpy в python?

    Vindicar
    @Vindicar
    Что такое производная функции, знаешь?
    Ну вот представь, что массив - это набор значений функции в последовательных точках.
    Правда, остаётся вопрос, какой шаг брать - т.е., насколько по оси X отстоят друг от друга нулевой элемент и первый элемент. Простейший случай - считаем координатой X индекс элемента в массиве. Но тогда производная вообще считается тривиально, так как расстояние по X между соседними точками будет равно 1. В приведённом тобой примере шаг (dx) выбирается случайно.

    В примере кода приведён простейший способ расчёта производной по двум точкам. Он прост, хотя и чувствителен к погрешностям. Есть и другие.
    Ответ написан
    2 комментария
  • Как получить из трехмерного массива numpy строки совпадающие с указанной?

    Vindicar
    @Vindicar
    (a == [2,0,2]).all(axis=2)
    a == [2,0,2] даст тебе трёхмерный массив булевых значений - результат поэлементного сравнения, при этом сравнение будет идти по последнему измерению.
    all(axis=2) сгруппирует этот массив по третьему измерению, при этом группа будет истинной, только если все значения в группе истинны. Т.е. только если в этой строке все значения совпали.
    >>> a = np.array([[[1, 0, 0], [2, 0, 1], [2, 0, 2]], [[0, 0, 0], [2, 0, 3], [0, 0, 0]]])
    >>> a == [2,0,2]
    array([[[False,  True, False],
            [ True,  True, False],
            [ True,  True,  True]],
    
           [[False,  True, False],
            [ True,  True, False],
            [False,  True, False]]])
    >>> (a == [2,0,2]).all(axis=2)
    array([[False, False,  True],
           [False, False, False]])
    Ответ написан
    1 комментарий
  • Можно ли сократить код с помощью numpy?

    Vindicar
    @Vindicar
    Какие числа могут быть в парах? Если любые, то дело осложняется.
    Если же небольшие целые положительные, то можно посчитать так.
    Строишь двумерный массив, где первый индекс - первое число из пары, второй - второе.
    Заполняешь нулями, потом увеличиваешь элемент на единицу каждый раз, когда встречена такая пара.
    Если две пары имеют общее число, они будут лежать на одной строке или на одном столбце.
    Тогда если пара не имеет общих чисел с другими, то сумма значений на её строке и её столбце будет 1.
    Если две пары имеют общее число, то сумма значений на их общем строке/столбце будет 2. И так далее.
    Отсюда вывод: для каждой строки и каждого столбца посчитай сумму значений минус 1 (но ограничь снизу по нулю!). Просуммируй полученные числа, и получишь ответ.
    Ответ написан
    Комментировать
  • Как решить ValueError: The truth value...?

    Vindicar
    @Vindicar
    numpy намекает, что выражение rgb != bg_color вернёт не логическое значение, а массив логических значений - результатов сравнения каждого элемента. Иными словами,
    print(numpy.array([1, 2, 3]) != numpy.array([1, 2, 4])) выведет [False, False, True]
    Как следствие, непонятно, считать ли такой массив истинным или ложным если в нём несколько значений и они разные.
    Предпреждение подсказывает и как это поправить.
    Если тебе нужно любое несовпадение, то пишешь (rgb != bg_color).any().
    Если нужно, чтобы все три канала цвета были разными, то (rgb != bg_color).all().

    Но если честно, cleared_img_data - какой-то странный массив.
    Ответ написан
    1 комментарий
  • Как исправить поворот массива numpy?

    Vindicar
    @Vindicar
    метод reshape() возвращает версию массива с другими размерами, а не меняет эти размеры на месте.
    Так как вы игнорируете возвращаемое значение, вы пытаетесь повернуть одномерный вектор.
    Но там ещё будут проблемы с sorted(arr_b), так как sorted() интерпретирует двумерный массив как коллекцию одномерных, и пытается сортировать только эту коллекцию.
    Ответ написан
    Комментировать