返回矩阵的元素和原矩阵元素需要一一对应
时间: 2023-09-02 08:13:09 浏览: 42
如果要保持元素的对应关系,可以使用`np.nditer`迭代器遍历多维数组,并在遍历的同时进行处理。修改后的代码如下:
```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 = np.zeros_like(arr, dtype=np.float32)
with np.nditer([arr, stretched_arr], flags=['multi_index'], op_flags=[['readonly'], ['writeonly']]) as it:
for x, y in it:
y[...] = (x - min_val) * (255 / (max_val - min_val))
y[y < 0] = 0
y[y > 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
return stretch_array(arr)
```
这里使用`np.nditer`迭代器遍历输入数组和输出数组,同时进行处理。在迭代器的循环体内,对每一个输入元素进行线性拉伸,然后将结果赋值给输出数组对应位置。最后对输出数组前5%和后5%的元素赋值为0和255。这样就可以保持输入数组和输出数组元素一一对应的关系。