2013-11-03 5 views
2

мне интересно, если векторизация может быть применен к двум входам векторных сразу ...векторизации Многомерные Операции в Python

Рассмотрим следующую простую функцию:

def f(x,y): 
    return(x+y,x-y) 

Я хочу дать функцию два вектора x=arange(3) и y=arange(4,6). Мой инстинкт - определить a,b=f(x,y), но python сообщает мне, что these operators could not be broadcast with shapes (3) (2). Ясно, что это работает, если y (или x) были скалярами.

Каким образом это можно сделать? Есть ли это?

+0

и какие результаты вы хотите получить для x = arange (3) и y = arange (4,6)? –

ответ

1

Это будет работать нормально, если размеры векторов x и y одинаковы. У вас есть следующие настройки кода:

In [16]: x=arange(3) 

In [17]: x 
Out[17]: array([0, 1, 2]) 

In [18]: y=arange(4,6) 

In [19]: y 
Out[19]: array([4, 5]) 

Очевидно, что х + у не определены. Поскольку х имеет 3 лица (размеры) и у имеет только 2.

Рассмотрим небольшую модификацию:

In [21]: y=arange(4,7) 

In [22]: x+y 
Out[22]: array([4, 6, 8]) 

In [23]: x-y 
Out[23]: array([-4, -4, -4]) 

Теперь, х + у и х-у работы, как и ожидалось.

Теперь ваша функция также будет работать нормально.

In [24]: def f(x,y): 
....:  return (x+y,x-y) 
....: 

In [25]: f(x,y) 
Out[25]: (array([4, 6, 8]), array([-4, -4, -4])) 
+0

Спасибо за это. Я должен был упомянуть, что мне действительно нужны элементарные операции. Поэтому не имеет значения, что я даю ему несогласованные матрицы x и y (на самом деле x и y являются «N-by-5-by-5», и я хочу записать это для выполнения матричных операций для каждого из 5-байтов, 5 матриц). – Sai

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