有一个二维数组,将所有元素按大小前5%和后5%分别赋值为0和255,其余按照大小拉伸到0-255
时间: 2024-03-03 17:52:46 浏览: 47
可以使用以下代码实现:
```python
import numpy as np
def stretch_array(arr):
sorted_arr = np.sort(arr.flatten())
n = arr.size
m = int(0.05 * n)
min_val = sorted_arr[m]
max_val = sorted_arr[-m-1]
stretched_arr = (arr - min_val) * (255 / (max_val - min_val))
stretched_arr[stretched_arr < 0] = 0
stretched_arr[stretched_arr > 255] = 255
stretched_arr[:m] = 0
stretched_arr[-m:] = 255
return stretched_arr.astype(np.uint8)
def process_array(arr):
n = arr.size
m = int(0.05 * n)
sorted_arr = np.sort(arr.flatten())
min_val = sorted_arr[m]
max_val = sorted_arr[-m-1]
arr[arr < min_val] = min_val
arr[arr > max_val] = max_val
stretched_arr = (arr - min_val) * (255 / (max_val - min_val))
stretched_arr[:m] = 0
stretched_arr[-m:] = 255
return stretch_array(stretched_arr)
```
这个函数输入一个二维数组,并返回一个经过线性拉伸和赋值的数组。其中,前5%赋值为0,后5%赋值为255,剩余部分根据数值大小线性拉伸到0-255。具体实现过程如下:
1. 将输入数组展开成一维数组,并进行从小到大的排序,找到前5%和后5%的位置。
2. 对输入数组进行截断,将小于前5%位置的值赋值为前5%位置的值,将大于后5%位置的值赋值为后5%位置的值。
3. 对进行截断后的数组进行线性拉伸,并将小于0和大于255的值截断到0或255。
4. 将前5%和后5%的值赋值为0和255。
5. 返回线性拉伸和赋值后的数组。
阅读全文