Numpy multidimensional array assigment unknown logic error

AI Thread Summary
The user is experiencing an issue with their bubble sort implementation on a multidimensional NumPy array, where all elements end up being set to the same value. This problem arises from the way NumPy handles array assignments, particularly with references to the same object rather than creating copies. The sorting logic is flawed because it swaps references instead of creating new copies of the elements, leading to all entries being the same after sorting. The user is advised to ensure proper array definition and consider using NumPy's built-in sorting functions for multidimensional arrays to avoid such issues. Understanding how NumPy manages memory and references is crucial for resolving this type of error.
NotASmurf
Messages
150
Reaction score
2
I'm confused as to why this bubble sort I'm implementing is setting _all_ items to one of the items (I have no idea which one as array is too big)

the data type is of
Python:
...
[[1128 1026 1192 1023]]
[[ 771  195  858  196]]
[[ 953 1799  955 1738]]]

when I have an array of int, this same algorithm sorts it perfectly, I presume my issue is that I do not understand multidimensional numpy array element assigment, please explain why this breaks:

Python:
lines = cv2.HoughLinesP(edges, rho, theta, threshold, np.array([]),
                    min_line_length, max_line_gap)
#sort by y
if(0==0):
    for i in range(0,len(lines)):
        for j in range(0,len(lines)):
            if(lines[i][0][1]<lines[j][0][1]):
                cnt = lines[i][0]
                lines[i][0] = lines[j][0]
                lines[j][0] = cnt

now the array is

Python:
[[[ 738 1831  867 1831]]
...
[[ 738 1831  867 1831]]
[[ 738 1831  867 1831]]
[[ 738 1831  867 1831]]]

why?
 
Technology news on Phys.org
NotASmurf said:
I'm confused as to why this bubble sort I'm implementing is setting _all_ items to one of the items (I have no idea which one as array is too big)

the data type is of
Python:
...
[[1128 1026 1192 1023]]
[[ 771  195  858  196]]
[[ 953 1799  955 1738]]]

when I have an array of int, this same algorithm sorts it perfectly, I presume my issue is that I do not understand multidimensional numpy array element assigment, please explain why this breaks:

Python:
lines = cv2.HoughLinesP(edges, rho, theta, threshold, np.array([]),
                    min_line_length, max_line_gap)
#sort by y
if(0==0):
    for i in range(0,len(lines)):
        for j in range(0,len(lines)):
            if(lines[i][0][1]<lines[j][0][1]):
                cnt = lines[i][0]
                lines[i][0] = lines[j][0]
                lines[j][0] = cnt

now the array is

Python:
[[[ 738 1831  867 1831]]
...
[[ 738 1831  867 1831]]
[[ 738 1831  867 1831]]
[[ 738 1831  867 1831]]]

why?
I think it's likely that you haven't defined your array correctly. See http://cs231n.github.io/python-numpy-tutorial/#numpy-arrays

Here's an example from the page in the link:
Python:
a = np.array([[1,2,3,4], [5,6,7,8], [9,10,11,12]])
This is a two-dimensional array. In Python-speak, it's a list of lists. Notice that the elements in each list are separated by commas, and that the sublists themselves are also separated by commas.

When an arrays is printed, commas aren't used, but they need to be there when you define the array.
 
Thread 'Is this public key encryption?'
I've tried to intuit public key encryption but never quite managed. But this seems to wrap it up in a bow. This seems to be a very elegant way of transmitting a message publicly that only the sender and receiver can decipher. Is this how PKE works? No, it cant be. In the above case, the requester knows the target's "secret" key - because they have his ID, and therefore knows his birthdate.
Back
Top