两个数组的Numpy减法

3
我有两个如下的numpy数组
a=np.array([11,12])
b=np.array([9])

#a-b should be [2,12]

我想要从a和b中减去,使得结果为[2,12]。我该如何实现这个结果?


不定义ba大小相同? - OneCricketeer
@cricket_007 是的,先生。 - user10360186
5个回答

7
你可以对数组中的一个元素进行零填充。
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 函数的第二个参数是 (左侧填充数, 右侧填充数)


2

与 @BlownhitherMa 相似的方法是创建一个大小与 a 相同的零数组(我们可以称其为 c),然后将 b 的值放在合适的位置:

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

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

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

1
你可以使用来自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]

0
这是一个非常长且详细的解决方案。
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

我们可以通过复制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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接