Тиражирование матрицы в пандах или клочках до определенного размера - PullRequest
0 голосов
/ 20 февраля 2019

У меня есть матрица A, представляющая собой (41, 41) матрицу данных.

B представляет собой матрицу размера (7154, 8240), ndarray.

Я хочу выполнить репликацию A(сохраняя целую матрицу 41x41 без изменений) до размера B. Он не будет соответствовать точно, но тогда он должен просто обрезать строки, которые не помещаются.

Это необходимо для умножения A * B.

Я попробовал этот код, но я не могу умножить на число с плавающей точкой.

repeat = pd.concat([A]*(B.shape[0]/A.shape[0]), axis=0, ignore_index=True)
filter_large = pd.concat([repeat]*(B.shape[1]/A.shape[1]), axis=1, ignore_index=True)

filter_l = filter_large.values   # change from a dataframe to a numpy array
AB = A*filter_l

Я должен упомянуть, что я пробовал numpy.resize, но он не сохраняет матрицу нетронутой, перепутываявсе строки, что не то, что я хочу.

1 Ответ

0 голосов
/ 20 февраля 2019

Этот код будет делать то, что вы просите:

shapeMultiples = (np.ceil(B.shape[0]/A.shape[0]).astype(int), np.ceil(B.shape[1]/A.shape[1]).astype(int))
res = np.tile(A, shapeMultiples)[:B.shape[0], :B.shape[1]]

Пояснение :

np.tile(A, reps) повторяет матрицу A несколько раз вдоль каждой оси.Как часто это повторяется, указывается для каждой оси в reps.

. Для вашего примера это должно повторяться b.shape[0]/a.shape[0] раз по оси 0 и b.shape[1]/a.shape[1] раз по оси 1. Однако вы должны округлить ихзначения, чтобы убедиться, что он расширяет размер матрицы B, что делает np.ceil.Поскольку ожидается, что reps будет представлять собой целую форму, а ceil возвращает число с плавающей запятой, мы должны привести тип к int.

. На последнем шаге мы обрезаем результат, чтобы он соответствовалразмер B с [:B.shape[0], :B.shape[1]].

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...