Скажем, у меня есть два массива 1D:
a = np.array ([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
b = np.array ([0, 1, 2, 3, 4, 5, 6, 7, 10, 10])
np.mean (a! = b)
Это даст в результате, насколько два массива отличаются друг от друга в%. То же самое я хотел бы делать с многомерными массивами, но с определенной глубиной в учете. Например, у нас есть два массива с кортежами.
a = np.array ([(1, 1), (2, 2)])
b = np.array ([(1, 1), (3, 3)])
np.mean (a! = b)
Это вернет 0,5, как ожидалось. Моя проблема возникает в следующем сценарии:
a = np.array ([(1, 1), (2, 2)])
b = np.array ([(1, 1), (2, 3)])
np.mean (a! = b)
Это вернет 0.25, а не так, как я ожидал бы 0.5. Кажется, что numpy сравнивается с "самым глубоким" уровнем. Есть ли способ повлиять на глубину/ось, так что результат снова будет равен 0,5?
Вы должны объединить свою diff-матрицу в одном измерении:
np.mean((a!=b).any(axis=1))
Еще один подход:
In [42]: a = np.array ([(1, 1), (2, 2)])
...: b = np.array ([(1, 1), (2, 3)])
# sum it along axis 1 and then take average
In [43]: np.mean(np.sum(np.not_equal(a, b), axis=1))
Out[43]: 0.5
# you can also, sum it along axis 0 and then take average
In [44]: np.mean(np.sum(np.not_equal(a, b), axis=0))
Out[44]: 0.5