Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

Np Array values are being changed without doing stuff

Why does :

print(np.delete(MatrixAnalytics(Cmp),[0],1))
MyNewMatrix = np.delete(MatrixAnalytics(Cmp),[0],1)
print("SecondPrint")
print(MyNewMatrix)

returns :

[[ 2.  2.  2.  2.  2.]
 [ 1.  2.  2.  2.  2.]
 [ 1.  2.  0.  2.  2.]
 [ 2.  2.  2.  2.  2.]
 [ 2.  2.  2.  0.  0.]
 [ 1.  2.  2.  0.  2.]
 [ 1.  2.  2.  2.  2.]
 [ 1.  2.  2.  2. nan]
 [ 2.  2.  2.  2.  2.]
 [ 2.  2.  2.  2. nan]]
Second Print
[[-1.  0.  0.  0.  0.]
 [-1.  0.  0.  0.  0.]
 [-1.  0. -1.  0.  0.]
 [-1.  0.  0.  0.  0.]
 [-1.  0.  0. -1.  0.]
 [-1.  0.  0. -1.  0.]
 [-1.  0.  0.  0.  0.]
 [-1.  0.  0.  0. nan]
 [-1.  0.  0.  0.  0.]
 [-1.  0.  0.  0. nan]]

This is weird, and can’t figure this out. Why Would the values change without any line of code between 3 print ?

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

def MatrixAnalytics(DataMatrix):
    AnalyzedMatrix = DataMatrix
    for i in range(len(AnalyzedMatrix)): #Browse Each Column
        for j in range(len(AnalyzedMatrix[i])): #Browse Each Line
            if j>0:
                if AnalyzedMatrix[i][j] > 50:
                    if AnalyzedMatrix[i][j] > AnalyzedMatrix[i][j-1]:
                        AnalyzedMatrix[i][j] = 2
                    else:
                        AnalyzedMatrix[i][j] = 1
                else:
                    if AnalyzedMatrix[i][j] <50:
                        if AnalyzedMatrix[i][j] > AnalyzedMatrix[i][j-1]:
                            AnalyzedMatrix[i][j] = 0
                        else:
                            AnalyzedMatrix[i][j] = -1                          
    return AnalyzedMatrix

The input array is :

[[55.  57.6 57.2 57.  51.1 55.9]
 [55.3 54.7 56.1 55.8 52.7 55.5]
 [55.5 52.  52.2 49.9 53.8 55.6]
 [54.9 57.8 57.6 53.6 54.2 59.9]
 [47.9 50.7 53.3 52.5 49.9 45.8]
 [57.  56.2 58.3 55.4 47.9 56.5]
 [56.6 54.2 57.6 54.7 50.1 53.6]
 [54.7 53.4 52.  52.  50.9  nan]
 [51.4 51.5 51.2 53.  50.1 50.1]
 [55.3 58.7 59.2 56.4 53.   nan]]

It seems that it call again the function MatrixAnalytics But I don’t understand why

**

Doing this works :

**

MyNewMatrix = np.delete(MatrixAnalytics(Cmp),[0],1)
print(MyNewMatrix)
MyNewMatrix = np.delete(MatrixAnalytics(Cmp),[0],1)
print("SecondPrint")
print(MyNewMatrix)

>Solution :

I think I got the issue.
In this code :

def MatrixAnalytics(DataMatrix):
    AnalyzedMatrix = DataMatrix
    ...
    ...                      
    return AnalyzedMatrix

AnalyzedMatrix is not a copy of DataMatrix, it’s referencing to the same object in memory !

So on the first call of MatrixAnalytics, your are actually modifying the object behind the reference given as argument (because arrays are mutable).
In the second call, your are giving the same reference as argument so the array behind it has already been modified.

note : return AnalyzedMatrix statement just returns the a new reference to the object referenced by the DataMatrix argument (not a copy).

Try to replace this line :

AnalyzedMatrix = DataMatrix

with this one (in your definition of MatrixAnalytics) :

AnalyzedMatrix = np.copy(DataMatrix)

For more info :

Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading