Как сравнить разницу в многомерных массивах?

1

Скажем, у меня есть два массива 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?

Теги:
arrays
numpy
multidimensional-array
mean

2 ответа

1
Лучший ответ

Вы должны объединить свою diff-матрицу в одном измерении:

np.mean((a!=b).any(axis=1))
  • 0
    Спасибо. Это сделал это! :)
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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню