#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