2015-06-03 4 views
0

У меня есть функция мульти-входы, скажем:Python: получить многомерную матрицу, как результаты от функции

def bla(a, b): 
    f = a + b 
    return f 

Когда я что-то вроде

import numpy as np 
bla(np.asarray([0.2,0.4]), np.asarray([2,4])) 

Результат является:

array([ 2.2, 4.4]) 

Тем не менее, я хочу, чтобы bla применялся к каждой возможной паре моих входов (bla(0.2, 2), bla(0.2, 4), bla(0.4, 2), bla(0.4, 4)) и получить окончательный результат в виде двумерной матрицы. В этом примере я хочу, чтобы результат был:

array([[2.2, 4.2], 
[2.4, 4.4] 
]) 

Как это сделать? Моя первоначальная проблема заключается в том, что у меня есть функция с тремя переменными и одним выходом, затем я хочу вызвать функцию, введя векторы для каждой переменной, чтобы получить 3-D матрицу в результате

+0

Можете ли вы объяснить, что вы хотите сделать более ясно? –

+0

Вы хотите матричное умножение? – alexis

+2

Откуда выходят 2,3 и 4.3? Вы имеете в виду 2.4 и 4.4? – mhawke

ответ

0

При условии, ваша функция bla может принимать массивы вместо скаляров, можно использовать meshgrid подготовить входы, так что bla(A, B) возвращает желаемый результат:

import numpy as np 
def bla(a, b): 
    f = a + b 
    return f 

A, B = np.meshgrid([0.2,0.4], [2,4], sparse=True) 
bla(A, B) 

дающий

array([[ 2.2, 2.4], 
     [ 4.2, 4.4]]) 
+0

Спасибо за вашу простую идею! – gravedigger

+0

При использовании mesgrid иногда возникают ошибки памяти, если a и b являются большими и есть три или более переменных. У вас есть другие решения? – gravedigger

+0

@gravedigger: Если вы используете 'sparse = True', тогда' np.meshgrid' вернет «разреженную сетку», которая будет потреблять гораздо меньше памяти. – unutbu

0

Не уверен, что вы хочу сделать это без изменения bla(), но для примера по крайней мере, где изменение должно быть:

def bla(a, b): 
    return np.asarray(a+n for n in b) 

Это работает на массиве a с каждый элемент из b, и строит массив с результатами. Ваш пример выглядит немного случайным (как вы получили эти .3 дробные части?), Но я предполагаю, что это то, к чему вы пытаетесь добраться.

Смежные вопросы