我有3000步的x = 2000到5000的振幅曲线和50000步的x = 0到10000的数据曲线。现在我想对数据进行标准化(与幅度曲线相乘),但正如您所看到的,这两个数组长度不等,起点不同。
有没有办法在不重新调整其中一个的情况下这样做? (幅度范围之外的所有值都可以为零)
答案 0 :(得分:0)
你说你不想调整列表的大小,所以你可能只需要使用while循环迭代两个列表并跟踪每个数组的索引。当你到达范围的一端时停止循环。
您还可以使用zip和map函数执行类似
的操作>>> b = [2, 4, 6, 8]
>>> c = [1, 3, 5, 7, 9]
>>> map( lambda x : x[0]*x[1], zip(b, c[1:]))
>>> [6, 20, 42, 72]
但我不确定你是否“可以”这样做。
答案 1 :(得分:0)
您可以规范化两个不等大小的数组,但您必须做出一两个关于对您的应用程序有意义的决定。
示例代码:
a1 = [1,2,3,4]
a2 = [20,30]
如果我想将a1中的值缩放a2,我应该怎么做?
对您的数据做有意义的事情。
答案 2 :(得分:0)
如果您对如何定义行和列标签非常聪明,可以使用pandas进行此操作。当您将数据帧相乘时,pandas将对齐列和行标签匹配的数据。标签不匹配的值将设置为NaN。请考虑以下示例:
# every other step
df1 = pandas.DataFrame(
data=np.arange(1, 10).reshape(3, 3),
columns=[1, 3, 5],
index=[0, 2, 4]
)
print(df1)
1 3 5
0 1 2 3
2 4 5 6
4 7 8 9
# every step
df2 = pandas.DataFrame(
data=np.arange(0, 25).reshape(5, 5),
columns=[1, 2, 3, 4, 5],
index=[0, 1, 2, 3, 4]
)
1 2 3 4 5
0 0 1 2 3 4
1 5 6 7 8 9
2 10 11 12 13 14
3 15 16 17 18 19
4 20 21 22 23 24
print(df1 * df2)
1 2 3 4 5
0 0 -- 4 -- 12 # <-- labels match
1 -- -- -- -- --
2 40 -- 60 -- 84 # <-- labels match
3 -- -- -- -- --
4 140 -- 176 -- 216 # <-- labels match
# ^ ^ ^
# | | |