Python NumPy的argsort问题

3

首先,我生成了一个随机的一维数组x,然后通过交换x的元素来生成数组y

现在,yx的一个排列。原则上,如果我应用numpy argsort,我应该得到不同的结果,但事实并非如此。

以下是我的Python代码:

import numpy as np
x = np.random.random(10)
print(x)
y = x
y[0], y[1] = x[1], x[0]
y[3], y[4] = x[4], x[3]
print(y)

然后我得到了。
[ 0.818  0.99   0.291  0.608  0.773  0.232  0.041  0.136  0.645  0.94 ]
[ 0.99   0.818  0.291  0.773  0.608  0.232  0.041  0.136  0.645  0.94 ]

现在
print(np.argsort(x))
print(np.argsort(y))

I got

[6 7 5 2 4 8 3 1 9 0]
[6 7 5 2 4 8 3 1 9 0]

y = x[:] 应该可以工作 - ᴀʀᴍᴀɴ
@Arman 谢谢,但 y = x[:]y=x 是一样的。 - Machine
y = x[:] 就像 y = x.copy() - ᴀʀᴍᴀɴ
@Arman 我正在使用Python3,它可能适用于其他版本的Python。顺便提一句,x是一个NumPy数组而不是列表。 - Machine
1
@Arman -- 我不确定。首先,x[:] 只有在 1D 数组中才有可能起作用。其次,x[:] 在 numpy 中创建了一个视图。我认为这在某些情况下可以创建一个副本,但通常不会。. . - mgilson
显示剩余2条评论
1个回答

4
当您执行以下操作时:
y = x

你使用alias关键字将yx进行了别名操作,它们指向同一对象。你可以通过执行以下语句来验证:

y is x  # True

相反,你可能想要:

y = x.copy()

谢谢!y = xy = x[:] 都不起作用; y is xy = x.copy() 都可以。 - Machine

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接