簡體   English   中英

兩個陣列的Numpy減法

[英]Numpy subtraction from two arrays

我有兩個像下面那樣的numpy數組

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

#a-b should be [2,12]

我想減去a和b,結果應該[2,12]。 我怎樣才能達到這個效果?

您可以對其中一個陣列進行零填充。

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)

一個類似的方法來@BlownhitherMa,是創建元素為零的數組的大小a (我們可以稱之為c ),再放入b的值在適當情況下:

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

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

>>> a-c
array([ 2, 12])

您可以使用itertools中的zip_longest

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]

這是一個很長的解決方案。

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)

我們可以通過復制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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM