Подтвердить что ты не робот

Транспортировка данных, не дающая ожидаемого результата

Я пытаюсь сделать очень простой пример в модуле Python scipy для метода транспонирования, но не дает ожидаемого результата. Я использую Ipython с режимом pylab.

a = array([1,2,3]
print a.shape
>> (3,)
b = a.transpose()
print b.shape
>> (3,)

Если я печатаю содержимое массивов "a" и "b", они похожи.

Ожидание: (что приведет к трансформации Matlab om)

 [1,
  2,
  3]
4b9b3361

Ответ 1

NumPy transpose() эффективно меняет форму массива. Если массив одномерный, это означает, что он не имеет эффекта.

В NumPy массивы

array([1, 2, 3])

и

array([1,
       2,
       3])

на самом деле одинаковы - они только различаются в пробелах. Возможно, вам нужны соответствующие двумерные массивы, для которых transpose() будет работать нормально. Также рассмотрите использование NumPy matrix type:

In [1]: numpy.matrix([1, 2, 3])
Out[1]: matrix([[1, 2, 3]])

In [2]: numpy.matrix([1, 2, 3]).T
Out[2]: 
matrix([[1],
        [2],
        [3]])

Обратите внимание, что для большинства приложений простой одномерный массив отлично работает как вектор строки или столбца, но при выходе из Matlab вы можете использовать numpy.matrix.

Ответ 2

Transpose - это noop для одномерных массивов.

Добавить новую ось и транспонировать:

>>> a[None].T
array([[1],
       [2],
       [3]])
>>> np.newaxis is None
True

Или измените форму:

>>> a.reshape(a.shape+(1,))
array([[1],
       [2],
       [3]])

Или как @Sven Марнах предложил в комментариях добавить новую ось в конец:

>>> a[:,None]
array([[1],
       [2],
       [3]])

Ответ 3

Вы должны попробовать: a = array([[1,2,3]]) или a = array([[1],[2],[3]]), то есть a должна быть матрицей (вектор-строка, вектор-столбец).

Ответ 4

Более сжатый способ изменить 1D-массив в 2D-массив:

a = np.array([1,2,3]),  a_2d = a.reshape((1,-1)) or a_2d = a.reshape((-1,1))

-1 в векторе формы означает "заполнить любое число, которое делает эту работу"