python - 用附加元素覆盖循环中的numpy数组
问题描述
我有许多我想更新的 numpy 数组。对于它们中的每一个,我想在末尾附加第一个元素的副本:
array_ = np.append(array_, array_[0])
由于它们很多,因此某种循环会很方便。如何循环执行此更新操作?
我试过使用类似的东西
for array_ in [array_1, array_2, array_3]:
array_ = np.append(array_, array_[0])
但是,这不会覆盖原始数组,因为array_ = ...
不会将其视为列表。How to update multiple Numpy arrays in a loop (using ) 中的解决方案array[:] = ...
也不起作用,因为附加的数组具有不同的长度。
我也尝试转换为列表和其他解决方法,但不知何故,我总是发现在某些时候我必须制作一个副本,以免原始数组被覆盖。
这可以以覆盖原始数组的方式完成吗?
解决方案
我不认为这是可能的。numpy.append
等操作concatenate
总是会创建 numpy 数组的副本,并且不会就地进行修改操作。例如,您可能会考虑做这样的事情 -
import numpy as np
array_1 = np.random.rand(100)
array_2 = np.random.rand(100)
array_3 = np.random.rand(100)
arr_list = [array_1, array_2, array_3]
for i in range(len(arr_list)):
arr_list[i] = np.append(arr_list[i], arr_list[i][0])
print(array_1.shape)
您明确告诉您希望修改存储在特定索引中的数组,但即使在这种情况下,操作也会创建一个新副本并简单地存储对列表的新引用。
现在,如果您可以就地执行附加操作,那么这样的事情就可以了。但是你不能,因为 numpy 是如何运作的。
一般来说,改变数组原始大小的操作永远不能原地执行。它总是创建一个新副本并将其分配给相关变量。而且我认为如果不修改数组就可以做到这一点。
我的建议是根本不要有变量array_i
,只将所有数组存储为一个列表。在那种情况下你不会有这个问题。
(已经发布了这个,我不确定是否有一些奇怪的方法可以通过直接将计算的输出分配给特定的 ID 或其他东西来做到这一点,但我认为将整个事物存储为数组开始会更方便和)
推荐阅读
- dynamics-crm - 从 Microsoft Flow 中的营销列表 (Dynamics CRM) 中获取所有联系人
- vue.js - 如何在 nuxt 页面 validate() 中访问当前实例?
- javascript - 将服务器端数据共享到 JS 文件
- c# - 检查要归档的 pdf 内容以发现 pdf 受密码保护
- excel - 根据 A 列数据将不同数量的 B 列单元格中的数据转换为单个逗号分隔的行
- javascript - VueJS忽略全局导入
- rust - 如何返回 &str 的向量?
- javascript - 在 React 中作为道具传递时区分 img 和 svg
- ruby-on-rails - 将 Rails 应用程序从 2 升级到 5 - 卸载模型逻辑
- spring - Thymeleaf 绑定表中的选定值