SNV 标准正态变换的python代码
import scipy.io as scio
import numpy as np
import matplotlib.pyplot as plt
data=scio.loadmat("spectrums_class1.mat") # x条光谱,y个光谱通道
testdata=np.array(data["data"])
print(testdata)
m=testdata.shape[0]
n=testdata.shape[1]
print(m,n)#
#求标准差
data_std=np.std(testdata,axis=1) # 每条光谱的标准差
#求平均值
data_average=np.mean(testdata,axis=1) # 每条光谱的平均值
#SNV计算
data_snv=[[((testdata[i][j]-data_average[i])/data_std[i]) for j in range(n)] for i in range(m)]
scio.savemat("spectrums_test.mat",{'data_snv':data_snv})
testdata = np.transpose(testdata)
plt.subplot(1,2,1)
plt.plot(testdata)
plt.subplot(1,2,2)
plt.plot(data_snv)
plt.show()
|