chrischris
chrischris

Reputation: 111

Comparing 2 arrays for tolerance

What I am trying to do is tax an array, transpose it , subtract the two arrays and then see if the difference of each cell is with a certain tolerance. I am able to get a subtracted array - but I don't know how to cycle through each item to compare the amounts - ideally I would test for floating-point near-equality; and return true - if all items are with a tolerance and false otherwise - not sure how do to this last step as well.

import numpy as np

a = np.array(([[1, 2, 3], [2, 3, 8],[ 3, 4, 1]])    
b = a.transpose(1, 0)

rows = a.shape[1]
col = a.shape[0]
r = abs(np.subtract(a, b))  # abs value of 2 array

i = 0
while i < rows:
    j = 0
    while j < rows:
        if np.any(r[i][j]) > 3:  # sample using 3 as tolerance
            print("false")
        j += 1
    print("true")
    i += 1

Upvotes: 1

Views: 2360

Answers (2)

Denziloe
Denziloe

Reputation: 8131

Is this not sufficient for your needs?

tolerance = 3
result = (abs(a - b) <= tolerance).all()

Upvotes: 4

lejlot
lejlot

Reputation: 66805

In this step

r = abs(np.subtract(a, b))

you already have a matrix of distances, so all you need to do is apply comparison operator (which in numpy is applied element-wise)

errors = r > 3

which results in boolean array, and if you want to see how many elements have true value, just sum it

print( np.sum(r > 3) )

and to check if any is wrong, you can just do

print( np.sum(r > 3) > 0 ) # prints true iff any element of r is bigger than 3

There are also built-in methods, but this reasoning gives you more flexibility in expressing what is "near" or "good".

Upvotes: 0

Related Questions