Substract numpy столбец массива из другого столбца - PullRequest
0 голосов
/ 01 мая 2020

Можно ли использовать numpy широковещательную рассылку для достижения вычитания одного столбца (столбец + 1) с другим столбцом (столбец -1) и деления их на константу (n).

arr = [[2, 4, 6, 5, 8],
       [5, 3, 7, 4, 4],
       [3, 9, 5, 2, 1]]

result = [
          [ 2, # (6 - 2)/2
           .5, # (5 - 4)/2
            1, # (8 - 6)/2
          ],
          [ 1, # (7 - 5)/2
           .5, # (4 - 3)/2
           -1.5 # (4 - 7)/2
          ],
          [ 1, # (5 - 3)/2
           -3.5, # (2 - 9)/2
           -2 # (1 - 5)/2
          ]
        ]

Или что такое эффективный способ достичь этого на ГБ данных?

Ответы [ 2 ]

3 голосов
/ 01 мая 2020

Учитывая один столбец col, операцию можно выполнить просто с массивом numpy.

col = 1
0.5 * (arr[:, col+1] - arr[:, col-1])
[Out]: array([2., 1., 1.])

И, наконец, выполнить всю операцию:

0.5 * (arr[:, 2:] - arr[:, :-2])
1 голос
/ 01 мая 2020

Я полагаю, у вас есть неправильное представление о том, что такое вещание, вы должны прояснить это. Вы можете использовать срезы, чтобы делать то, что вы хотите, срезы дадут вам доступ к представлениям, которые не будут занимать память, но продукт вычитания должен будет храниться в памяти. Если вы хотите, чтобы это было более эффективно, чем это, вы, вероятно, должны написать это в c с многопоточностью.

https://repl.it/repls/YawningAcceptableLivecd

посмотрите, что b и c имеют свою базу как.

import numpy as np
a = np.array([[2, 4, 6, 5, 8],
       [5, 3, 7, 4, 4],
       [3, 9, 5, 2, 1]])
b = a[:,2::]
c = a[:,:-2:]
print b
print b.base is a
print c
print c.base is a
res = (b-c)/2.0
print res
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...