Заменить значение центрального пикселя в массиве NumPy на максимальное значение в том же массиве - PullRequest
0 голосов
/ 08 марта 2020

Предположим, переменная содержит несколько массивов, таких как:

data = array([[1,2,3],
             [4,5,6],
             [10,11,12]],dtype=float32)

       array([[1,2,3],
               [4,5,6],
               [7,8,9]],dtype=float32)

Я хочу сравнить центральный элемент (ie. 5 в обоих массивах) со всеми элементами в соответствующих массивах и вернуть самый большой элемент, значение которого больше, чем в 2 раза центральный элемент (5x2 = 10 в обоих массивах), в противном случае вернуть центральный элемент.

Ожидаемый результат для приведенного выше примера:

 data = [[12],
        [5]]

Ответы [ 2 ]

1 голос
/ 08 марта 2020
import numpy as np 

def getMax(array): 
    shape = array.shape
    l = shape[0]
    r = shape[1]
    middle = array[l // 2, r // 2]
    _max = np.amax(array)
    return _max if _max > 2 * middle else middle

d1 = np.array([[1,2,3],
               [4,5,6],
               [9,10,11]])

d2 = np.array([[1,2,3],
               [4,5,6],
               [7,8,9]])

data = [d1, d2]

ans = []
for d in data:
    ans.append(getMax(d))

print(ans) # [11, 5]

Это то, что я получил для матрицы 3 на 3, при условии, что вы используете numpy.

1 голос
/ 08 марта 2020

Это будет делать то, что, я думаю, вы просите:

import numpy as np

data = [np.array([[1, 2, 3],
                   [4, 5, 6],
                   [9, 11, 12]], dtype=int),
        np.array([[1, 2, 3],
                   [4, 5, 6],
                   [7, 8, 9]], dtype=int)]

output = []
for arr in data:
    centre = arr[len(arr)//2, len(arr)//2]
    maximum = np.max(arr)
    if maximum > (centre * 2):
        output.append(maximum)
    else:
        output.append(centre)

print(output)

Вывод

[12, 5]

Как интересно, из Python 3.8 вы можете использовать назначение ( aka Walrus), чтобы сделать это в одной строке списка.

print([maximum if (maximum:= np.max(x)) > ((centre := x[(point := len(x)//2), point]) * 2) else centre for x in data])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...