【发布时间】:2017-04-29 15:51:10
【问题描述】:
我在 numpy 中对数组进行洗牌时遇到了这个不寻常的问题
arr = np.arange(9).reshape((3, 3))
print "Original constant array"
print arr
new_arr=arr
for i in range(3):
np.random.shuffle(new_arr)
print "Obtained constant array"
print arr
print "randomized array"
print new_arr
arr 是我保留的原始数组,并创建了新数组new_arr 以供进一步计算。但是代码显示了这个输出
Original constant array
[[0 1 2]
[3 4 5]
[6 7 8]]
Obtained constant array
[[6 7 8]
[0 1 2]
[3 4 5]]
randomized array
[[6 7 8]
[0 1 2]
[3 4 5]]
我只想随机化new_arr 而不是arr。为什么会发生这种情况以及如何防止arr 改组?
【问题讨论】:
-
"创建了新数组
new_arr" - 不,你没有。new_arr=arr不会创建新数组。请参阅nedbatchelder.com/text/names.html(但切片在列表和 NumPy 数组之间的工作方式略有不同,因此不要尝试将有关切片的部分应用于 NumPy 数组)。 -
您可能需要创建深层副本。背景见numpy array assignment problem。