Сетка
Me sh может помочь вам создать все пары, а не просто суммировать их. В качестве бонуса его можно расширить до нескольких измерений:
>>> y = np.arange(1,5)
>>> x = np.arange(6,10)
>>> x
array([6, 7, 8, 9])
>>> y
array([1, 2, 3, 4])
>>> sum(np.meshgrid(x,y))
array([[ 7, 8, 9, 10],
[ 8, 9, 10, 11],
[ 9, 10, 11, 12],
[10, 11, 12, 13]])
Чтобы поместить это в функцию с неизвестным числом массивов:
def meshSum(*arrays):
return sum(np.meshgrid(*arrays))
Пример с другим массивом:
>>> z = np.arange(11,15)
>>> def meshSum(*arrays):
... return sum(np.meshgrid(*arrays))
...
>>> meshSum(x,y,z)
array([[[18, 19, 20, 21],
[19, 20, 21, 22],
[20, 21, 22, 23],
[21, 22, 23, 24]],
[[19, 20, 21, 22],
[20, 21, 22, 23],
[21, 22, 23, 24],
[22, 23, 24, 25]],
[[20, 21, 22, 23],
[21, 22, 23, 24],
[22, 23, 24, 25],
[23, 24, 25, 26]],
[[21, 22, 23, 24],
[22, 23, 24, 25],
[23, 24, 25, 26],
[24, 25, 26, 27]]])
После вашего редактирования для произвольной операции на me sh
def meshOperation(f, *arrays):
return f((*np.meshgrid(*arrays))
, где f
должен принимать либо аргумент *args
, либо число аргументы равны len(arrays)
, поэтому meshOperation (f, x, y) действителен в вашем последнем примере.