python - 为什么一个数组中值的变化会影响另一个数组(具有完全相同的值)上的值,而该值不参与操作?
问题描述
当我运行命令“negative_only[negative_only>0]=0”(这应该使数组“negative_only”上的正值= 0)时,类似数组(“positive_only”)上的值也会改变。为什么会这样?我正在使用 Python 3.7(Windows 10 / Spyder IDE)。
下面是操作两个数组的代码。“long_dollars_ch”是一个约 2700 x 60 的数组,有一些正值、一些负值和很多零。此代码是循环遍历数组“long_dollars_ch”的每一行的循环的一部分。
# calculations to isolate top contributors to NAV change for audits
top_check = 3 # number of top values changes to track
# calculate dollar change (for longs), and create array with most positive/negative values
long_dollars_ch[c_day,:] = long_shares[c_day,:]*hist_prices_zeros[c_day,:]-long_shares[c_day,:]*hist_prices_zeros[c_day-1,:]
positive_only = long_dollars_ch[c_day,:]
positive_only[positive_only<0]=0 #makes non-positive values zero
idx = np.argsort(positive_only) #creat index representing sorted values for only_positive for c_day
non_top_vals = idx[:-top_check]
negative_only = long_dollars_ch[c_day,:]
negative_only[negative_only>0]=0 #makes non-negative values zero
idx = np.argsort(negative_only) #creat index representing sorted values for only_negative for c_day
non_bottom_vals = idx[:-top_check]
# create array that shows the most positive/negative dollar change for "top-check" securities
long_dollars_ch_pos[c_day,:] = positive_only
long_dollars_ch_pos[c_day,:][non_top_vals] *= 0
long_dollars_ch_neg[c_day,:] = negative_only
long_dollars_ch_neg[c_day,:][non_bottom_vals] *= 0
此代码的目标是创建两个数组。对于原始数组“long_dollars_ch”的每一行,一个仅具有顶部“top_check”正值(如果有),另一个具有底部“top_check”负值(如果有)。但是,Python 似乎将“positive_only”和“negative_only”视为相同的“变量”。因此,其中一个的操作会影响另一个内部的值(这不是操作的一部分)。
解决方案
它很简单。
在 numpynp.array x = np.array y
你不复制数组:)
您对数组 x 进行了引用。
换句话说,使用“=”后您没有两个数组。您仍然有一个数组 x,以及对该数组的引用(y 是该引用)。
positive_only = long_dollars_ch[c_day,:]
.
.
,
negative_only = long_dollars_ch[c_day,:]
不要复制 long_dollars_ch,而只是引用它。您需要使用复制方法或其他方法(numpy 提供其中的一些方法)才能使其工作。这是一个文档
编辑:我发布了错误的链接,现在可以了。
推荐阅读
- javascript - 无法从 Angular 1.x 中的 Jasmine 测试更新 Angular 组件控制器
- azure-logic-apps - 如何在 Logic-Apps 上调试代码?
- c# - 为什么这个 IOException 不在异步方法中抛出?
- vcdiff - 关于 RFC3284 - VCDIFF 格式的说明
- c++ - 使用求解器 SparseLU 并出现错误 C2664
- angular - 带有 AOT 的延迟加载模块 - TypeError: '' 从 NGINX 提供时不是函数
- php - 使用 Imagick 在 Codeigniter php 中均衡图像
- ios - 使用 WebRTC 在本机 iOS 应用程序中共享屏幕
- matplotlib - Matplotlib 没有正确显示符号/uni-codes
- javascript - “JSON 值”
' NSNull 类型的'在尝试将对象存储为 AsyncStorage 中的字符串时,无法在 React Native 中转换为 NSString"