Numpy, файл 2 радкі 1 калонка, loadtxt () вяртае 1row 2 калонкі

2.765334406984874427e+00
3.309563282821381680e+00

Файл выглядае як вышэй: 2 шэрагу, 1 седлавіны numpy.loadtxt() вяртае

[ 2.76533441  3.30956328]

Калі ласка, не кажы мне выкарыстоўваць array.transpose() у гэтым выпадку, мне трэба рэальнае рашэнне. Загадзя дзякуй!!

2

6 адказы

Вы заўсёды можаце выкарыстоўваць каманду перакроіць. Адзіночны нагрузкі калонкі тэкставага файла ў выглядзе масіва 1D, які ў выпадку Numpy з'яўляецца вектар-радок.

>>> a
array([ 2.76533441,  3.30956328])

>>> a[:,None]
array([[ 2.76533441],
       [ 3.30956328]])

>>> b=np.arange(5)[:,None]
>>> b
array([[0],
       [1],
       [2],
       [3],
       [4]])
>>> np.savetxt('something.npz',b)
>>> np.loadtxt('something.npz')
array([ 0.,  1.,  2.,  3.,  4.])
>>> np.loadtxt('something.npz').reshape(-1,1) #Another way of doing it
array([[ 0.],
       [ 1.],
       [ 2.],
       [ 3.],
       [ 4.]])

Вы можаце праверыць гэта з дапамогай колькасці вымярэнняў.

data=np.loadtxt('data.npz')
if data.ndim==1: data=data[:,None]

або

np.loadtxt('something.npz',ndmin=2) #Always gives at at least a 2D array.

Although its wабоth pointing out that if you always have a column of data numpy will always load it as a 1D array. This is mабоe of a feature of numpy arrays rather then a bug I believe.

5
дададзена
Абнаўленне з адказам.
дададзена аўтар Daniel, крыніца
дзякуй! Такім чынам, у будучыні, я павінен зрабіць чэк першым, каб убачыць, калі файл «памылковае» чытаецца як вектар-радок? Як я магу гэта зрабіць? @Ophion
дададзена аўтар bayesrule, крыніца

Вы заўсёды можаце выкарыстоўваць каманду перакроіць. Адзіночны нагрузкі калонкі тэкставага файла ў выглядзе масіва 1D, які ў выпадку Numpy з'яўляецца вектар-радок.

>>> a
array([ 2.76533441,  3.30956328])

>>> a[:,None]
array([[ 2.76533441],
       [ 3.30956328]])

>>> b=np.arange(5)[:,None]
>>> b
array([[0],
       [1],
       [2],
       [3],
       [4]])
>>> np.savetxt('something.npz',b)
>>> np.loadtxt('something.npz')
array([ 0.,  1.,  2.,  3.,  4.])
>>> np.loadtxt('something.npz').reshape(-1,1) #Another way of doing it
array([[ 0.],
       [ 1.],
       [ 2.],
       [ 3.],
       [ 4.]])

Вы можаце праверыць гэта з дапамогай колькасці вымярэнняў.

data=np.loadtxt('data.npz')
if data.ndim==1: data=data[:,None]

або

np.loadtxt('something.npz',ndmin=2) #Always gives at at least a 2D array.

Although its wабоth pointing out that if you always have a column of data numpy will always load it as a 1D array. This is mабоe of a feature of numpy arrays rather then a bug I believe.

5
дададзена
Абнаўленне з адказам.
дададзена аўтар Daniel, крыніца
дзякуй! Такім чынам, у будучыні, я павінен зрабіць чэк першым, каб убачыць, калі файл «памылковае» чытаецца як вектар-радок? Як я магу гэта зрабіць? @Ophion
дададзена аўтар bayesrule, крыніца

Калі вы хочаце, вы можаце выкарыстоўваць матрыца чытаць з радка. Хай test.txt ўключае змест. Вось функцыя для вашых патрэб:

import numpy as np

def my_loadtxt(filename):
    return np.array(np.matrix(open(filename).read().strip().replace('\n', ';')))

a = my_loadtxt('test.txt')
print a

Гэта дае вектары-слупкі, калі ўваходны вектар-слупок. Для вектараў радкоў, гэта дае вектары-радка.

2
дададзена
Там няма нічога, каб дараваць :) Вы можаце прыняць рашэнне, якое вы хочаце.
дададзена аўтар petrichor, крыніца
У Вас ёсць дадатковая новы радок у канцы?
дададзена аўтар petrichor, крыніца
Не, я змяніў адказ адпаведна.
дададзена аўтар petrichor, крыніца
так, ёсць дадатковая новая лінія, я павінен абрэзаць яго?
дададзена аўтар bayesrule, крыніца
вялікі дзякуй! Гэта рашэнне, якое я хачу. Але папярэдні шмат пісаў. Я прыняў, што першы ... Даруй мне.
дададзена аўтар bayesrule, крыніца
Я спрабую ваша рашэнне, выглядае пышна. Тым не менш, у маім выпадку гэта не працуе .. Файл "./bp.py", радок 13, у my_loadtxt зваротнага np.array (np.matrix (адкрытае (імя файла) .read (). Замяніць ( '\ п' , ';'))) Файл "/Library/Frameworks/Python.framework/Versions/2.7/lib/pytho‌ n2.7/сайт-пакеты/п & ZWNJ; umpy/matrixlib/defma & ZWNJ; trix.py", лінія 254, у новы дадзеных = _convert_from_string (дадзеныя) Файл «/Library/Frameworks/Python.framework/Versions/2.7/lib/pytho‌ n2.7/сайт-пакеты/н & ZWNJ; umpy/matrixlib/defma & ZWNJ; trix.py », радок 50, у _convert_from_string падняць ValueError (" радкоў не супадае з памерам ".) ValueError: радкі ня такога ж памеру.
дададзена аўтар bayesrule, крыніца

Калі вы хочаце, вы можаце выкарыстоўваць матрыца чытаць з радка. Хай test.txt ўключае змест. Вось функцыя для вашых патрэб:

import numpy as np

def my_loadtxt(filename):
    return np.array(np.matrix(open(filename).read().strip().replace('\n', ';')))

a = my_loadtxt('test.txt')
print a

Гэта дае вектары-слупкі, калі ўваходны вектар-слупок. Для вектараў радкоў, гэта дае вектары-радка.

2
дададзена
Там няма нічога, каб дараваць :) Вы можаце прыняць рашэнне, якое вы хочаце.
дададзена аўтар petrichor, крыніца
У Вас ёсць дадатковая новы радок у канцы?
дададзена аўтар petrichor, крыніца
Не, я змяніў адказ адпаведна.
дададзена аўтар petrichor, крыніца
вялікі дзякуй! Гэта рашэнне, якое я хачу. Але папярэдні шмат пісаў. Я прыняў, што першы ... Даруй мне.
дададзена аўтар bayesrule, крыніца
так, ёсць дадатковая новая лінія, я павінен абрэзаць яго?
дададзена аўтар bayesrule, крыніца
Я спрабую ваша рашэнне, выглядае пышна. Тым не менш, у маім выпадку гэта не працуе .. Файл "./bp.py", радок 13, у my_loadtxt зваротнага np.array (np.matrix (адкрытае (імя файла) .read (). Замяніць ( '\ п' , ';'))) Файл "/Library/Frameworks/Python.framework/Versions/2.7/lib/pytho‌ n2.7/сайт-пакеты/п & ZWNJ; umpy/matrixlib/defma & ZWNJ; trix.py", лінія 254, у новы дадзеных = _convert_from_string (дадзеныя) Файл «/Library/Frameworks/Python.framework/Versions/2.7/lib/pytho‌ n2.7/сайт-пакеты/н & ZWNJ; umpy/matrixlib/defma & ZWNJ; trix.py », радок 50, у _convert_from_string падняць ValueError (" радкоў не супадае з памерам ".) ValueError: радкі ня такога ж памеру.
дададзена аўтар bayesrule, крыніца

Вы можаце выкарыстоўваць модуль CSV:

import csv
import numpy as np

reader = csv.reader( open('file.txt') )
l = list(reader)
a = np.array(l)

a.shape
>>> (2,1)

Такім чынам, вы атрымаеце правільныя памеры масіва, незалежна ад колькасці радкоў/слупкоў, якія прысутнічаюць у файле.

1
дададзена
Ура! У мяне было прадчуванне, але я не спрабавала ...
дададзена аўтар bayesrule, крыніца

Я напісаў абгортку для loadtxt , каб зрабіць гэта і падобна на адказ ад @petrichor, але я думаю, матрыца не можа мець фармат радкі дадзеных (магчыма, па зразумелых прычынах) так і гэты метад, здаецца, не працуе, калі вы загружаеце радка (напрыклад, загалоўкі слупкоў).

def my_loadtxt(filename, skiprows=0, usecols=None, dtype=None):
    d = np.loadtxt(filename, skiprows=skiprows, usecols=usecols, dtype=dtype, unpack=True)
    if len(d.shape) == 0:
        d = d.reshape((1, 1))
    elif len(d.shape) == 1:
        d = d.reshape((d.shape[0], 1))
    return d
0
дададзена