Транспортировка данных, не дающая ожидаемого результата
Я пытаюсь сделать очень простой пример в модуле 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]
Ответы
Ответ 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 в векторе формы означает "заполнить любое число, которое делает эту работу"