将NumPy数组中的中心像素值替换为同一数组中的最大值

时间:2020-03-08 13:59:16

标签: python numpy

假设变量包含多个数组,例如:

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)

我想比较中心元素(即两个数组中的5)与它们各自数组中的所有元素,并返回其值大于中心元素2倍(5x2)的最大元素在两个数组中均= 10),否则返回中心元素。

以上示例的预期输出:

 data = [[12],
        [5]]

2 个答案:

答案 0 :(得分:1)

这将满足我的要求:

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])

答案 1 :(得分:1)

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]

假设您使用的是numpy,这就是我对3 x 3矩阵的解析度。