【问题标题】:Using a for loop to append to arrays in Numpy Python在 Numpy Python 中使用 for 循环追加到数组
【发布时间】:2022-01-25 10:13:50
【问题描述】:

下面的代码在 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)}

【问题讨论】:

    标签: python numpy dictionary for-loop append


    【解决方案1】:

    您在内部 for 循环的每次迭代中都声明了一个新的 appender,并且因为 np.append 没有就地附加,所以没有任何内容被保存。我建议你使用list.append,然后转换为np.array

    如果您使用list.append,则您的代码只需很少的更改。只需将Valuesup_value_oneup_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}
    

    【讨论】:

    • 我可以将它们作为一个列表,然后将它们转换为 numpy 数组吗?
    • @bullselcuk 你的意思是在循环内部?完成循环后将它们转换为 numpy 数组更有效。
    猜你喜欢
    • 2021-08-10
    • 1970-01-01
    • 2020-10-12
    • 2014-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-21
    • 2020-04-04
    相关资源
    最近更新 更多