我有一個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
# ^ ^ ^
# | | |