Вычитание из двух массивов - PullRequest
0 голосов
/ 19 октября 2018

У меня есть два массива, как показано ниже

a=np.array([11,12])
b=np.array([9])

#a-b should be [2,12]

Я хочу вычесть оба a & b так, чтобы результат получился [2,12].Как мне достичь этого результата?

Ответы [ 5 ]

0 голосов
/ 19 октября 2018

Мы можем избежать ненужных отступов / временных значений, скопировав a и затем вычтя b на месте:

# let numpy determine appropriate dtype
dtp = (a[:0]-b[:0]).dtype
# copy a
d = a.astype(dtp)
# subtract b
d[:b.size] -= b
0 голосов
/ 19 октября 2018

Метод, аналогичный @BlownhitherMa, заключается в создании массива нулей размером a (мы можем назвать его c), а затем в соответствующих случаях вставьте значения b:

c = np.zeros_like(a)
c[np.indices(b.shape)] = b

>>> c
array([9, 0])

>>> a-c
array([ 2, 12])
0 голосов
/ 19 октября 2018

Вы можете использовать zip_longest из itertools:

import numpy as np
from itertools import zip_longest

a = np.array([11, 12])
b = np.array([9])

result = np.array([ai - bi for ai, bi in zip_longest(a, b, fillvalue=0)])
print(result)

Вывод

[ 2 12]
0 голосов
/ 19 октября 2018

Вот очень давно выложенное решение.

diff =[]

n = min(len(a), len(b))
for i in range (n):
    diff.append(a[i] - b[i])
if len(a) > n:
    for i in range(n,len(a)):
        diff.append(a[i])
elif len(b) > n:
    for i in range(n,len(b)):
        diff.append(b[i])
diff=np.array(diff)
print(diff)
0 голосов
/ 19 октября 2018

Вы можете заполнить нулями один из массивов.

import numpy as np

n = max(len(a), len(b))
a_pad = np.pad(a, (0, n - len(a)), 'constant')
b_pad = np.pad(b, (0, n - len(b)), 'constant')

ans = a_pad - b_pad

Здесь второй аргумент np.pad (#of left pads, #of right pads)

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