Установите max для определенного столбца массива numpy - PullRequest
0 голосов
/ 12 марта 2019

Есть ли в любом случае взять в основном столбец массива NumPy и всякий раз, когда абсолютное значение больше, чем число, установите значение этого числа со знаком.

т.е..

for val in col:
    if abs(val) > max:
        val = (signed) max

Я знаю, что это можно сделать с помощью цикла и тому подобного, но мне было интересно, есть ли более чистый / встроенный способ сделать это.

Я вижу, что есть что-то вроде

arr[arr > 255] = x

Чтовроде того, что я хочу, но я хочу сделать это по столбцу, а не по всему массиву.В качестве бонуса может быть способ сделать абсолютные значения вместо того, чтобы делать две отдельные операции для положительного и отрицательного.

Ответы [ 2 ]

1 голос
/ 12 марта 2019

Ответ от Scientific1st хорош, но он не поможет вам в этом.Честно говоря, это что-то вроде RTFM.Но вы были бы прощены за то, что не взяли Numpy indexing docs с первой попытки, потому что они плотные и модель данных будет чужой, если вы выходите из более традиционной среды программирования.

Вы должны будете использовать np.clip в столбцах, которые хотите обрезать, например:

x[:,2] = np.clip(x[:,2], 0, 255)

Это применимо np.clip ко 2-му столбцу массива, «разрезая» все строки,затем переназначает его во 2-й столбец.: - это синтаксис Python, означающий «дай мне все элементы индексируемой последовательности».

В более общем смысле вы можете использовать индекс логического поднабора, который вы обнаружили таким же образом, разрезая строки и выбираяжелаемые столбцы:

x[x[:,2] > 255, 2] = -1
1 голос
/ 12 марта 2019

Попробуйте вызвать клип для вашего массива:

import numpy as np
values = np.array([-3,-2,-1,0,1,2,3])
values.clip(-2,2)

Out[292]:
array([-2, -2, -1,  0,  1,  2,  2])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...