繁体   English   中英

如何在for循环中修改Numpy数组

[英]How to modify Numpy array in for loop

我有一个1和0的Pandas数据帧转换为数组:[0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1]

我正在使用以下函数来修改数组:

def regressor(x, param):
    new_array = x
    for i in range(len(new_array)):

        length = len(new_array)
        current = new_array[(length-i)-1]
        previous = new_array[(length-i)-2]

        if current != 0:
            if previous == 0:
                new_array[(length-i)-2] = current*param

    return new_array

但是,我的数组仍然没有变化。 new_array [(length-i)-2]似乎没有实际修改数组的那个元素。

有人能告诉我我错过了什么吗? 谢谢

更新:我的问题已解决,方法是将DataFrame转换为pandas.Series,然后将其转换为函数中的列表。

如果我运行您的代码,我会得到这个(对于param = 2):

x = [0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1]

def regressor(x, param):
    new_array = x
    for i in range(len(new_array)):

        length = len(new_array)
        current = new_array[(length-i)-1]
        previous = new_array[(length-i)-2]

        if current != 0:
            if previous == 0:
                new_array[(length-i)-2] = current * param

    return new_array

new_array = regressor(x, 2)
print(new_array)
# Output:
# [8, 4, 2, 1, 2097152, 1048576, 524288, 262144, 131072, 65536, 32768, 16384, 8192, 4096, 2048, 1024, 512, 256, 128, 64, 32, 16, 8, 4, 2, 1]

你为什么看不到new_array变化? 您是否真的调用了回归函数来更新数组? 此外,在函数开头将x复制到new_array是多余的。

只需重新发布函数并进行一些编辑即可获得更好的可读性:

def regressor(arr, param):
    for i in range(len(arr)):

        length = len(arr)
        current = arr[(length-i)-1]
        previous = arr[(length-i)-2]

        if (current != 0) and (previous == 0):
                arr[(length-i)-2] = current * param

    return arr

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM