如何在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 然后将其转换为函数内的列表来解决。
如果我运行你的代码我得到这个(参数=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
我有一个由 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 然后将其转换为函数内的列表来解决。
如果我运行你的代码我得到这个(参数=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