我有一個問題,分別有 2 個單獨的 numpy 陣列。
Year: np.array([2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019])
Data: np.array([29057, 30979, 31746, 32964, 31738, 31010,31158,28736,26821,28260])
有沒有辦法可以顯示資料比上一年減少至少 5% 的年份。
例如產出:資料下降至少 5% 的年份:(2017 年,7.77%)
uj5u.com熱心網友回復:
你可以這樣做:
# filter the data elements, this returns an array where some elements are None
l = [year[i] if (data[i]-data[i-1])/data[i-1] < 0.05 else None for i in range(1, len(data))]
# filter out None from the list
l = list(filter(lambda x: x is not None, l))
uj5u.com熱心網友回復:
您可以使用以下代碼:
import numpy as np
Year = np.array([2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019])
Data = np.array([29057, 30979, 31746, 32964, 31738, 31010,31158,28736,26821,28260])
d_years = []
for d1, d2 in enumerate(Data):
if d1 == 0:
prev = d2
else:
percentage = 100 - ((d2 / prev) * 100)
prev = d2
if percentage > 5:
d_years.append(Year[d1])
print('decresed by {p:0.2f}% in {y}'.format(p=percentage, y = Year[d1]))
print(d_years)
uj5u.com熱心網友回復:
對于純 numpy 解決方案,您可以使用:
pct_change = np.diff(Data)/Data[:-1]
# array([ 0.06614585, 0.02475871, 0.03836704, -0.03719209, -0.0229378 ,
# 0.00477265, -0.07773285, -0.06664115, 0.05365199])
mask = pct_change<-0.05
# array([False, False, False, False, False, False, True, True, False])
np.vstack([Year[1:], Data[1:]])[:, mask]
# array([[ 2017, 2018],
# [28736, 26821]])
pct_change[mask]
# array([-0.07773285, -0.06664115])
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/485472.html
上一篇:ndarray的基于陣列的索引
