2017-02-11 7 views
0

Я хотел был бы векторизовать некоторый код, но мне трудно применить некоторые функции к векторам переменных.numpy.column_stack vectorized

Например, у меня есть два постоянных вектора: a и b, а также вектор векторов x (матрица). Размеры элементов x такие же, как у a и b. Хочу сделать матрицы, образованные из столбцов: член x, a и b:

x = [[ 0.76662363 -0.0397725 0.64086377] 
[ 0.76198581 -0.04605764 0.6459538 ]] 

a = [ 0.2763932 0.85065081 -0.5527864 ] 

b = [-0.7236068 0.52573111 -0.5527864 ] 

Вывод должен быть вектор (или массив) двух матриц 3x3. Я пытаюсь выполнить следующий код:

a = np.column_stack((x, a, b)) 

однако я получаю сообщение об ошибке, что размеры не совпадают по аргументам:

File "/software/python/2.7.8/lib/python2.7/site-packages/numpy/lib/shape_base.py", line 317, in column_stack 
    return _nx.concatenate(arrays, 1) 
ValueError: all the input array dimensions except for the concatenation axis must match exactly 

Любые идеи?

+0

Пожалуйста, добавьте образец ввода и ожидаемый результат. Кроме того, добавьте stacktrace вашей ошибки. – ppasler

+0

Как вы переставляете 12 терминов (2x3,3,3) на 18 терминов (2 3x3)? – hpaulj

+0

hpaulj, взяв 2 копии a и b. – John

ответ

1

Идущий с обновленными требованиями:

>>> N = 2 # n cols of x.T 
>>> K = 3 # x and a and b 
>>> M = 3 # len(a) 
>>> outstack = np.empty((N, M, K)) 
>>> outstack[..., 0] = x 
>>> outstack[..., 1] = a[None, :] 
>>> outstack[..., 2] = b[None, :] 

outstack складывает две матрицы 3х3.

Трюк здесь предопределяет выходной стек. Вывод служит ссылкой на радиовещание, поэтому a и b могут использоваться почти без изменений и будут правильно передаваться.

+0

К сожалению, это дает мне одну матрицу, размер которой равен 3 x 4, а два первых столбца - x.T, а последние два столбца - a и b. Я хочу две матрицы 3x3, по одному для каждого элемента x. – John

+0

@ Джона, вы имеете в виду, что хотите две копии x.T с одним соединенным в качестве третьего столбца, один с b? –

+0

Нет. Мне нужны две матрицы 3x3. Если x1 и x2 - это две строки из x (столбцы xT), мне нужны две матрицы: (x1 ab) (x2 ab) Причина, по которой мне нужно оцифровать код, состоит в том, что члены x являются 10^8, вместо 2. – John