2014-11-05 36 views
0

我有一个3000步的x = 2000到5000的幅度曲线和50000步的x = 0到10000的数据曲线。现在我想对数据进行归一化(与幅度曲线相乘),但正如您所看到的,这两个数组的长度不相等,并且有不同的起点。Python将两个不等长的数组相乘

有没有办法做到这一点,而不调整其中的一个? (幅度范围之外的所有值都可以为零)

回答

0

你说你不想调整列表的大小,所以你可能只需要使用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] 

,但我不知道如果多数民众赞成你的东西“可以”做的。

0

您可以将两个不同大小的数组标准化,但是您必须对您的应用程序有意义做出一个或两个决定。

示例代码:

a1 = [1,2,3,4] 
a2 = [20,30] 

如果我想在规模由A2 A1的值,我应该怎么办呢?

  • 通过指数配对,丢弃多余的长度
  • 使指数的副本A2垫的长度
  • 垫值A2与固定值A2
  • 插入值,以创建新的数据点,而加入其长度

做什么对您的数据有意义。

0

如果你对如何定义行和列标签很敏感,你可以用熊猫来做到这一点。当您乘数据框时,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 
# ^ ^ ^
# |  |  |