我有一个3000步的x = 2000到5000的幅度曲线和50000步的x = 0到10000的数据曲线。现在我想对数据进行归一化(与幅度曲线相乘),但正如您所看到的,这两个数组的长度不相等,并且有不同的起点。Python将两个不等长的数组相乘
有没有办法做到这一点,而不调整其中的一个? (幅度范围之外的所有值都可以为零)
我有一个3000步的x = 2000到5000的幅度曲线和50000步的x = 0到10000的数据曲线。现在我想对数据进行归一化(与幅度曲线相乘),但正如您所看到的,这两个数组的长度不相等,并且有不同的起点。Python将两个不等长的数组相乘
有没有办法做到这一点,而不调整其中的一个? (幅度范围之外的所有值都可以为零)
你说你不想调整列表的大小,所以你可能只需要使用while循环迭代两个列表并记录每个数组的索引。当你到达一个范围的末尾时停止循环。
你也可以用拉链和地图功能,像做
>>> 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]
,但我不知道如果多数民众赞成你的东西“可以”做的。
您可以将两个不同大小的数组标准化,但是您必须对您的应用程序有意义做出一个或两个决定。
示例代码:
a1 = [1,2,3,4]
a2 = [20,30]
如果我想在规模由A2 A1的值,我应该怎么办呢?
做什么对您的数据有意义。
如果你对如何定义行和列标签很敏感,你可以用熊猫来做到这一点。当您乘数据框时,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
# ^ ^ ^
# | | |