Я новичок в Python, так что будьте любезны.
Я пытаюсь сравнить два массива Numpy с функцией np.logical_or
. Когда я запускаю приведенный ниже код, на
появляется ошибка.
Percentile = np.logical_or(data2 > Per1, data2 < Per2)
линия с указанием
ValueError: operands could not be broadcast together with shapes (2501,201) (2501,)
data = 1st Array
data2 = 2nd Array
Per1 = np.percentile(data, 10, axis=1)
Per2 = np.percentile(data, 90, axis=1)
Percentile = np.logical_or(data2 > Per1, data2 < Per2)
print(Percentile)
Я проверил форму обоих массивов, и они оба имеют одинаковую форму (2501,201)
(2501,201)
. Поэтому я изо всех сил пытаюсь понять, почему возникает эта ошибка, любая помощь будет принята с благодарностью.
Вам нужно добавить измерение (используя [:, None]
для Per1
и Per2
, чтобы сделать их транслируемыми для данных.
Percentile = np.logical_or(data2 > Per1[:, None], data2 < Per2[:, None])
Если вы проверите форму Per1 или Per2, вы увидите, что его значение - (2501,)
(поскольку вы берете процентиль по оси 1), поэтому оба этих выражения data2 > Per1
, data2 < Per2
выдают ошибку, чтобы ваш код работал с вами. необходимо сделать оба операнда совместимой формы с помощью reshape
, который превратит ваши векторы-строки в векторы-столбцы:
Per1 = np.percentile(data, 10, axis=1).reshape(-1, 1)
Per2 = np.percentile(data, 90, axis=1).reshape(-1, 1)
Вот и все. Большое спасибо.