Пороговое значение двумерного массива в python

#python #arrays #threshold

#python #массивы #пороговое значение

Вопрос:

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

 def thresholding(arr,rows,cols,max,min):
    for x in range(arr.shape[0]):
        for y in range(arr.shape[1]):
            for i in range(rows):
                for j in range(cols):
                    if(arr[x,y,i,j] >= max):
                        arr[x,y,i,j] = max
                    elif(arr[x,y,i,j] <= min):
                        arr[x,y,i,j] = min
    return arr
 

Комментарии:

1. Можете ли вы показать пример того, как выглядит ваш массив? Почему 2d-массив имеет 4 индекса? Являются rows == arr.shape[0] ли и cols == arr.shape[1] ?

Ответ №1:

Использование numpy.clip :

 np.clip(np.array([[1,2,3], [4,5,6]]), 2, 4)   # [[2,2,3], [4,4,4]]
 

Ответ №2:

Отредактировал ваш код

 def thresholding(arr,max_,min_):
    '''
    input
    ------
    arr : 2d array
    max_ : Intended max value for threshold
    min_ : Intended min value for threshold
    
    Notes
    ------
    Takes an array with the elements of a, 
    and returns an array where values < min are replaced with min(provided), 
    and those > max with max(provided)
    '''

    for i in range(arr.shape[0]):
      for j in range(arr.shape[1]):
        if arr[i,j] > max_:
          arr[i,j] = max_
        if arr[i,j] < min_:
          arr[i,j] = min_
    return arr
 

вы также можете использовать np.clip, и у него гораздо больше функций.см. Здесь .
np.clip