待处理的数据:150*150的灰度图片,除分析目标外,背景已经抹0
需要实现的目标:背景数字0不变,对其余数字做一个归一化处理
对list处理可以用
a=list(set(a)) # 实现了去除重复元素并排序
对array处理可以用np.unique()这个函数,可以去除其中重复的元素,并按元素由大到小返回一个新的无元素重复的元组或者列表
import numpy as np
A = [1, 2, 2, 3, 4, 3]
a = np.unique(A)
print(a) # 输出为 [1 2 3 4]
a, b, c = np.unique(A, return_index=True, return_inverse=True)
print(a, b, c) # 输出为 [1 2 3 4], [0 1 3 4], [0 1 1 2 3 2]
之后可以根据排序出的数组求得最大值与除0外的最小值,在线性归一化中还遇到一个问题,如果保留0值不动,只对非0元素做(x-min)/(max-min)变换
发现一个函数非常适合了:np.where()
img = (img-min)/(max-min)
arr = np.where(img <= 1, img, 0)
numpy.where(condition, [x, y])
1、这里x,y是可选参数,condition是条件,这三个输入参数都是array_like的形式;而且三者的维度相同
2、当conditon的某个位置的为true时,输出x的对应位置的元素,否则选择y对应位置的元素;
3、如果只有参数condition,则函数返回为true的元素的坐标位置信息;
今天还学到了一个新函数记录一下:
np.maximum:(X, Y, out=None)
1、X 与 Y 逐位比较取其大者;
2、最少接收两个参数
总结:对numpy库还非常不熟悉,要慢慢学习。