2014-11-05 504 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 
# ^ ^ ^
# |  |  |