下面的代碼在 for 回圈內的給定范圍內生成隨機整數,我想將這些值分配給 numpy 陣列,Values, up_value_one,up_value_two但是下面的 for 回圈不起作用。的值Values, up_value_one,up_value_two作為空陣列回傳。我將如何能夠使用appender作為變數追加a,b,c到Values, up_value_one,up_value_two和更新陣列?
import numpy as np
from random import seed
from random import randint
# seed random number generator
seed(1)
def MXincrementedUpside():
Values = np.array([])
up_value_one= np.array([])
up_value_two= np.array([])
for x in range(3):
a = randint(0, 20)
b = randint(0, 10)
c = randint(0, 15)
for appender,vals in zip([Values, up_value_one,up_value_two],
[a,b,c]):
appender = np.append(appender,vals)
return {'Percentage Change': Values, 'Initial %':up_value_one,'Ending %':up_value_two}
result = MXincrementedUpside()
print(result)
預期輸出:
{'Percentage Change': array([1, 3,17], dtype=float64), 'Initial %': array([6,9,10], dtype=float64), 'Ending %': array([11,12,3], dtype=float64)}
uj5u.com熱心網友回復:
您在appender內部 for 回圈的每次迭代中都宣告了一個新的,并且因為np.append沒有就地附加,所以沒有保存任何內容。我建議您使用list.append然后轉換為np.array之后。
如果您使用list.append,您的代碼需要最少的更改。只需更改Values,up_value_one并up_value_two列出并使用list.append。由于它就地附加,所有這些串列都會在回圈中更新:
def MXincrementedUpside():
Values = []
up_value_one = []
up_value_two = []
for x in range(3):
a = randint(0, 20)
b = randint(0, 10)
c = randint(0, 15)
for appender,vals in zip([Values, up_value_one,up_value_two],
[a,b,c]):
appender.append(vals)
return {'Percentage Change': np.array(Values), 'Initial %': np.array(up_value_one),'Ending %': np.array(up_value_two)}
但是如果你堅持使用np.append,下面是一種方法:
def MXincrementedUpside():
Values = np.array([])
up_value_one= np.array([])
up_value_two= np.array([])
for x in range(3):
Values = np.append(Values, randint(0, 20))
up_value_one = np.append(up_value_one, randint(0, 10))
up_value_two = np.append(up_value_two, randint(0, 15))
return {'Percentage Change': Values, 'Initial %':up_value_one, 'Ending %':up_value_two}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/392560.html
