使用 for 循环附加到 Numpy 中的数组 Python
Using a for loop to append to arrays in Numpy Python
下面的代码在 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)}
您在内部 for 循环的每次迭代中都声明了一个新的 appender
,并且由于 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}
下面的代码在 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)}
您在内部 for 循环的每次迭代中都声明了一个新的 appender
,并且由于 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}