对于N个dim numpy数组中的每个元素,将其添加到一维numpy数组中并返回N + 1个dim数组

时间:2019-12-05 13:36:51

标签: python arrays numpy

我试图依次将一个numpy数组的每个元素添加到另一个numpy 1D数组中,但不作为逐个元素的操作添加。 更具体地说,定义func

import numpy as np

array1 = np.array([1,2,3,4])
array2 = np.array([10,20,30])

def func(array1,array2):
  #what goes here?
  return output_array

output_array = func(array1,array2)

因此: output_array = np.array([[11,12,13,14],[21,22,23,24],[31,32,33,34]])

我设法使用:

def func(array1,array2):
  return np.array(list(map(lambda x: x + array1,array2)))

但是,似乎应该有一种更好的方法来做到这一点,将其推广到n维也很有用。我尝试了np.vectorize()

def func(array1,array2):
  np_function = np.vectorize(lambda x: x + array1)
  return np_function(array2)

但是这不起作用,因为它尝试将序列分配给迭代器内的单个数组元素(错误“使用序列设置数组元素”)。

3 个答案:

答案 0 :(得分:4)

您不需要任何特殊功能,这是numpy的Java generics void/Void types功能的教科书用例。您只需要:

output_array = array1[None, :] + array2[:, None]  # or even array1 + array2[:, None]

要了解它,请看一下它们之间的区别

print(array1.shape)          # (4,)
print(array1[:, None].shape) # (4, 1)
print(array1[None, :].shape) # (1, 4)

当您通过(4, 1)广播(1, 4)时,您会得到(4, 4)

答案 1 :(得分:1)

另一种方法:np.add(array2.reshape(3,1),array1)

答案 2 :(得分:1)

只需将第一个数组重塑为2d,然后将其添加到第二个数组即可。

array3 = np.reshape(array2,(-1, 1))+ array1

输出:

[[11 12 13 14]
 [21 22 23 24]
 [31 32 33 34]]