我正试图在Python:中移植这个MatLab函数
fs = 128;
x = (0:1:999)/fs;
y_orig = sin(2*pi*15*x);
y_noised = y_orig + 0.5*randn(1,length(x));
[yseg] = mapstd(y_noised);
我写了这段代码(它很有效,所以没有丢失变量或其他问题(:
Norm_Y = 0
Y_Normalized = []
for i in range(0, len(YSeg), 1):
Norm_Y = Norm_Y + (pow(YSeg[i],2))
Norm_Y = sqrt(Norm_Y)
for i in range(0, len(YSeg), 1):
Y_Normalized.append(YSeg[i] / Norm_Y)
print("%3d %f" %(i, Y_Normalized[i]))
YSeg是Y_Noised(我在代码的另一部分中写了它(。现在,我不希望MatLab代码和我的代码之间的值相同,因为YSeg或Y_Noised是由RAND值生成的,所以它们不同也没关系,但差异太大了。
以下是Matlab:中的前10个值
0.145728655284548
1.41918657039301
1.72322238170491
0.684826842884694
0.125379108969931
-0.188899711186140
-1.03820858801652
-0.402591786430960
-0.844782236884026
0.626897216311757
虽然这是我的python代码中的前10个数字:
0.052015
0.051132
0.041209
0.034144
0.034450
0.003812
0.048629
0.016854
0.024484
0.021435
就好像我的要低100倍。所以我觉得我在正常化过程中错过了一步。你能帮忙吗?
您可以使用numpy:在python中很容易地规范化向量
import numpy as np
def normalize_vector(input_vector):
return input_vector / np.sqrt(np.sum(input_vector**2))
random_vec = np.random.rand(10)
vec_norm = normalize_vector(random_vec)
print(vec_norm)
您可以使用输入向量(YSeg(调用所提供的函数并检查输出。我希望得到与matlab中类似的输出。
这是numpy:中的一个实现
import numpy as np
fs = 127
x = np.arange(10000) / fs
y_orig = np.sin(2 * np.pi * 15 * x)
y_noised = y_orig + 0.5 * np.random.randn(len(x))
yseg = (y_noised - y_noised.mean()) / y_noised.std()
然而,为什么你认为这些值是";太多不同了";?毕竟,y_orig
的值在[-1, 1]
的范围内,并且你将它们随机扭曲,平均约0.4。