繁体   English   中英

为什么一个数组中的值更改会影响操作中未涉及的另一个数组(具有完全相同的值)上的值?

[英]Why is the change of values in one array is affecting the value on another array (with exact same values) that isn't involved in the operation?

当我运行命令“ 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”视为相同的“变量”。 因此,其中一个操作会影响另一个内部的值(这不是该操作的一部分)。

它很简单。

在numpy np.array x = np.array y您不复制array :)

您引用数组x。

换句话说,使用“ =”后,您将没有两个数组。 您仍然有一个数组x,以及对该数组的引用(y是该引用)。

positive_only = long_dollars_ch[c_day,:]
.
.
,
negative_only = long_dollars_ch[c_day,:]

不要复制long_dollars_ch,而仅对其进行引用。 您需要使用复制方法或其他方法(numpy提供了其中的几种方法)使其起作用。 这是一个文档

编辑:我发布了错误的链接,现在可以。

暂无
暂无

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

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