Python Numpy多维数组分配未知逻辑错误

Python Numpy多维数组分配未知逻辑错误,python,numpy,Python,Numpy,我不明白为什么我在numpy数组上实现的冒泡排序会将所有项设置为其中一项(我不知道哪个项太大,因为数组太大) 数据类型为 ... [[1128 1026 1192 1023]] [[ 771 195 858 196]] [[ 953 1799 955 1738]]] 当我有一个int数组时,同样的算法对它进行了完美的排序 g = [i for i in range(10)] for i in range(0,len(g)): for j in range(0,len(

我不明白为什么我在numpy数组上实现的冒泡排序会将所有项设置为其中一项(我不知道哪个项太大,因为数组太大)

数据类型为

...

[[1128 1026 1192 1023]]

[[ 771  195  858  196]]

[[ 953 1799  955 1738]]]
当我有一个int数组时,同样的算法对它进行了完美的排序

 g = [i for i in range(10)]

for i in range(0,len(g)):
    for j in range(0,len(g)):
        if(g[i]>g[j]):
            cnt = g[i]
            g[i] = g[j]
            g[j] = cnt
我想我的问题是我不理解多维numpy数组元素分配,请解释为什么会出现这种情况:

lines = cv2.HoughLinesP(edges, rho, theta, threshold, np.array([]),

                min_line_length, max_line_gap)
按每个项目的第二个元素排序
为什么??非常感谢您的帮助。

当您希望代码将变量的值分配给新对象时,您的代码会有不同的解释:

引自:

Python中的赋值语句不复制对象,而是创建 目标和对象之间的绑定。对于 易变的或包含易变项的,有时需要一个副本以便 可以更改一个副本而不更改另一个副本。本模块提供 一般的浅拷贝和深拷贝操作(解释如下)

我举一个列表示例:

a
初始化为一个列表,其中一个元素的值为9:

In [1]: a = [9]
现在

虽然看起来您刚刚创建了一个与
a
具有相同值的对象,但实际上这行代码所做的是创建对
相同
对象的引用

因此,为
a
的第一个元素指定一个新值将更改基础对象:

In [3]: a[0] = 1
如果您为该对象指定的新名称被调用,它仍将引用该对象:

In [4]: b
Out[4]: [1]
为了避免不必要的行为,您应该使用
copy

In [1]: import copy

In [2]: a = [9]

In [3]: b = copy.copy(a)

In [4]: a[0] = 1

In [5]: b
Out[5]: [9]
np.array
有一个.copy()方法,您可以这样调用它,而无需导入copy:

a = np.array([1,2,3])
b = a.copy()

如果你把
cnt=lines[i][0].copy()
lines[i][0]=lines[j][0].copy()
!谢谢你,如果你把这个作为一个答案,我会把它标记为正确的
In [4]: b
Out[4]: [1]
In [1]: import copy

In [2]: a = [9]

In [3]: b = copy.copy(a)

In [4]: a[0] = 1

In [5]: b
Out[5]: [9]
a = np.array([1,2,3])
b = a.copy()