Как правильно транслировать, вычитая 2 разные матрицы в Numpy - PullRequest
0 голосов
/ 20 июня 2019

Я пытаюсь вычесть две матрицы разных форм, используя трансляцию. Однако я застрял в какой-то момент. Нужно простое решение, как решить проблему.

Буквально я оцениваю данные в сетке (первый шаг - вычитание). Например, у меня есть 5 точек сетки сетка = (-20, -10, 0, 10, 20) и массив данных длиной 100.

Line: u = grid.reshape ((ngrid, 1)) - данные отлично работает ngrid = 5 в этом тривиальном примере. Выходные данные представляют собой матрицу из 5 строк и 100 столбцов, поэтому каждая точка данных оценивается в каждой точке сетки.

Далее я хочу сделать это для 2 сеток и 2 наборов данных одновременно (данные имеют размер (2x100, например, 2 рандовых массива). Мне уже удалось вычесть два набора данных из одной сетки, но использование двух сеток выдает ошибка.

В приведенном ниже примере a - это вертикальный массив сетки, длина 5 точек, а data - массив случайных данных формы (100,2). В этом случае используется кортеж (2,5 100), поэтому u [0] и u [1] имеет 5 строк и 100 столбцов, что означает, что данные были правильно вычтены из сетка.

Вторая строка кода - это то, что я пытаюсь сделать. Ошибка следующая: ValueError: операнды не могут быть переданы вместе с фигурами (5,2) (2,1100)

u = a - data.T [:, None] # a - вертикальная сетка из 5 элементов. Работает нормально.

u = grid_test - data.T [:, None] # grid_test - это 2 столбца 5 строк матрицы из 2 сеток. Ошибка.

Мне нужна строка кода, аналогичная приведенной выше, но она должна работать, если " a " содержит 2 столбца, например две разные сетки. В итоге ожидаемый результат - « u », который содержит в дополнение к вышеописанным результатам еще две матрицы, в которых одинаковые данные (оба массива) оцениваются во второй сетке.

К сожалению, я не могу использовать петли - только векторизация и трансляция.

Заранее спасибо.

...