Проблемы с переносом данных одного столбца в python

Я создал текстовый файл под названием «column.txt», содержащий следующие данные:

1
2
3
4
9
8

Затем я написал приведенный ниже код для переноса данных в однострочный текстовый файл.

import numpy as np
x=np.loadtxt('column.txt')
z=x.T 
y=x.transpose()
np.savetxt('row.txt',y, fmt='%i') 

Я попробовал два разных способа - с помощью матричного умножения (закомментированная строка в моем коде) и с помощью команды транспонирования. Проблема заключалась в том, что вывод был точно таким же, как ввод!

После этого я добавил еще один столбец во входной файл, запустил код, и, что удивительно, на этот раз результат был в полном порядке (вывод содержал две строки!)

Итак, мой вопрос:

Есть ли способ транспонировать файл с одним столбцом в файл с одной строкой? Если да, не могли бы вы описать, как?


person Armin    schedule 11.09.2015    source источник
comment
Вы читали это -› stackoverflow.com/questions/5954603/transposing- массив-numpy?   -  person Pankaj Parashar    schedule 11.09.2015


Ответы (3)


Вы можете использовать numpy.reshape для переноса данных и изменения форма вашего массива выглядит следующим образом:

>>> import numpy as np
>>> arr=np.loadtxt('column.txt')
>>> arr
array([ 1.,  2.,  3.,  4.,  9.,  8.])
>>> arr.shape
(6,)
>>> arr=arr.reshape(6,1)
>>> arr
array([[ 1.],
       [ 2.],
       [ 3.],
       [ 4.],
       [ 9.],
       [ 8.]])

или вы можете просто указать номер измерения массива в качестве входных данных для numpy.loadtxt функция

>>> np.loadtxt('column.txt', ndmin=2)
array([[ 1.],
       [ 2.],
       [ 3.],
       [ 4.],
       [ 9.],
       [ 8.]])

Но если вы хотите преобразовать один столбец в одну строку и записать его в файл, вам нужно сделать следующее:

>>> parr=arr.reshape(1,len(arr))
np.savetxt('column.txt',parr, fmt='%i')
person Dalek    schedule 11.09.2015

Если ваши входные данные состоят только из одного столбца, np.loadtxt() вернет одномерный массив. Транспонирование в основном означает изменение порядка осей. Для одномерного массива только с одной осью это недопустимо. Вы можете преобразовать массив в двумерный массив разными способами, и транспонирование будет работать так, как ожидается для двумерного массива, например.

x = np.atleast_2d(np.loadtxt('column.txt'))
person Sven Marnach    schedule 11.09.2015

Это связано с тем, что транспонирование одномерного массива совпадает с самим собой, поскольку нет другого измерения для транспонирования.

Вы можете попробовать добавить второе измерение, сделав это,

>>> import numpy as np    
>>> x = np.array([[1], [2], [3], [4], [9], [8]])
>>> x.T
array([[1, 2, 3, 4, 9, 8]])
person Pankaj Parashar    schedule 11.09.2015