如何在numpy中将1d数组添加到2d数组元素中以获得3d数组



我有一个2d数组的值,我想添加一个1d数组到这个2d数组元素明智,这样我就会得到一个3d数组,其中每个元素是原来的2d数组加上1d数组的各自元素。例如:

A = np.array([
[10, 9, 8, 7, 6],
[5, 4, 3, 2, 1]
])
B = np.array([1, 2, 3])
#What A + B should return:
np.array([
[[11, 10, 9, 8, 7], [6, 5, 4, 3, 2]],
[[12, 11, 10, 9, 8], [7, 6, 5, 4, 3]],
[[13, 12, 11, 10, 9], [8, 7, 6, 5, 4]]
])

我可以很容易地用一个正常的for循环做到这一点,但这在纯numpy中可能吗?

我相信这给了您想要的输出?

import numpy as np
A = np.array([
[10, 9, 8, 7, 6],
[5, 4, 3, 2, 1]
])
B = np.array([1, 2, 3])
A = A.reshape(1, 2, 5)
B = B.reshape(3, 1, 1)
for each in A + B:
print (each)

# Result:
# [[11 10  9  8  7]
#  [ 6  5  4  3  2]]
# [[12 11 10  9  8]
#  [ 7  6  5  4  3]]
# [[13 12 11 10  9]
#  [ 8  7  6  5  4]]
import numpy as np

A = np.array([
[10, 9, 8, 7, 6], [5, 4, 3, 2, 1]
])
B = np.array([1, 2, 3])
# What A + B should return:
# np.array([
#     [[11, 10, 9, 8, 7], [6, 5, 4, 3, 2]],
#     [[12, 11, 10, 9, 8], [7, 6, 5, 4, 3]],
#     [[13, 12, 11, 10, 9], [8, 7, 6, 5, 4]]
# ])

temp = np.array([A]*len(B)).flatten()
add = np.repeat(B, len(A.flatten()))
temp += add
result = temp.reshape((B.shape[0],)+A.shape)
print(result)
# np.array([
#     [[11, 10, 9, 8, 7], [6, 5, 4, 3, 2]],
#     [[12, 11, 10, 9, 8], [7, 6, 5, 4, 3]],
#     [[13, 12, 11, 10, 9], [8, 7, 6, 5, 4]]
# ])

您可以在这里使用列表推导,并使用一行代码

import numpy as np
A = np.array([
[10, 9, 8, 7, 6],
[5, 4, 3, 2, 1]
])
B = np.array([1, 2, 3])
r = np.array([A+b for b in B])
print(r)
# [[[11 10  9  8  7]
#   [ 6  5  4  3  2]]
# 
#  [[12 11 10  9  8]
#   [ 7  6  5  4  3]]
# 
#  [[13 12 11 10  9]
#   [ 8  7  6  5  4]]]

最新更新