简体   繁体   English

如何按元素将一维数组添加到二维数组以在 numpy 中获取 3d 数组

[英]How to add a 1d array to a 2d array element-wise to get a 3d array in numpy

I have a 2d array of values, and I want to add a 1d array to this 2d array element wise such that I would get a 3d array where each element is the original 2d array plus a respective element of the 1d array.我有一个二维值数组,我想向这个二维数组元素明智地添加一个一维数组,这样我会得到一个 3d 数组,其中每个元素都是原始二维数组加上一维数组的相应元素。 For example:例如:

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]]
])

I was able to do this pretty easily with a normal for loop but is this possible in pure numpy?我能够使用普通的 for 循环很容易地做到这一点,但这在纯 numpy 中可能吗?

I believe this gives you the output you're after?我相信这会给你你想要的 output?

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]]
# ])

you can have fun with list comprehension here and do it with a one-liner你可以在这里享受列表理解的乐趣,并用一行代码来完成

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]]]

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM