python - 如何在 for 循环中修改 Numpy 数组
问题描述
我有一个 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
推荐阅读
- php - Laravel 的 CORS 标头缺少错误
- mapbox - Mapbox - 无效的瓷砖顺序
- c++ - 我遇到了这个代码片段并且不明白。它递归地检查 C++ 字符串中是否存在大写字符
- css - 动画卡片内下拉菜单的 Z-index 问题
- ruby - `&method(:function)` 是什么意思?
- php - 如何在 WordPress 中显示翻译后的作者角色名称
- asynchronous - 如何创建一个流,其中项目基于流先前返回的项目?
- go - 使用 UNWIND 时如何访问 Neo4j 结果?
- asp.net - Azure AD 身份验证无休止循环,错误太多请求
- calendar - Google 日历让日历所有者收到新活动的电子邮件通知