我试图依次将一个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)
但是这不起作用,因为它尝试将序列分配给迭代器内的单个数组元素(错误“使用序列设置数组元素”)。
答案 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]]