Попытка создать массив списков с данными txt, Python

#python #arrays #txt

Вопрос:

    44.5000   70.5000    1.0000
   44.0000   66.0000    1.0000
   33.0000   76.5000    1.0000
 

Я пытаюсь преобразовать такие данные в массив, подобный этому, используя numpy

 ([[44.5000, 70.5000, 1.0000], [44.0000,66.0000,1.0000],[3.0000,76.5000,1.0000]])
 

Я пробовал этот код, но этот код требует, чтобы я вводил данные сто раз

 t_d = [list(map(float, input().split())) for _ in range(60)]
 

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

Ответ №1:

 a = np.loadtxt(r'c:testnptext.txt')
print(a)
 

Выходной сигнал:

 [[44.5 70.5  1. ]
 [44.  66.   1. ]
 [33.  76.5  1. ]]
 

Edit2 (файл в памяти)

 import numpy as np
from io import StringIO

txt = """44.5000 70.5000 1.0000 
44.0000 66.0000 1.0000 
33.0000 76.5000 1.0000
"""
mfile = StringIO()
mfile.write(txt)
mfile.seek(0)
a = np.loadtxt(mfile)
print(a)
 

Edit3 (ввод и вывод буфера обмена)

 import numpy as np
from io import StringIO
import pyperclip

txt = pyperclip.paste()
mfile = StringIO()
mfile.write(txt)
mfile.seek(0)
a = np.loadtxt(mfile)
pyperclip.copy(a.__str__())
 

Комментарии:

1. Большое вам спасибо, но поскольку я использую colab, есть ли какой-нибудь способ просто использовать подобные данные не в текстовом файле, а просто в такой форме? Я имею в виду, что я просто скопировал и вставил свои данные в colab

Ответ №2:

Попробуйте это:

 with open("text.txt", "r") as file:
    lines = file.readlines()
    array = np.array([i.split() for i in lines], dtype="float")
print(array)
 

Вывод:

 array([[44.5, 70.5,  1. ],
       [44. , 66. ,  1. ],
       [33. , 76.5,  1. ]])
 

Комментарии:

1. Большое вам спасибо, но поскольку я использую colab, есть ли какой-нибудь способ просто использовать подобные данные не в текстовом файле, а просто в такой форме? Я имею в виду, что я просто скопировал и вставил свои данные в colab.

Ответ №3:

Если вы хотите превратить строку в массив Numpy, вы можете использовать np.fromstring .

 import numpy as np

string = "44.5000 70.5000 1.0000 44.0000 66.0000 1.0000 33.0000 76.5000 1.0000"
a = np.fromstring(string, sep=" ")
 

Это дает следующий результат.

 >>> a
array([44.5, 70.5,  1. , 44. , 66. ,  1. , 33. , 76.5,  1. ])
 

Затем вы можете использовать np.reshape для преобразования вашего массива Numpy в 2D-массив с 3 столбцами.

 >>> np.reshape(a, (-1, 3))
array([[44.5, 70.5,  1. ],
       [44. , 66. ,  1. ],
       [33. , 76.5,  1. ]])
 

Комментарии:

1. Спасибо, но мне нужен 2-мерный массив, могу ли я как-нибудь это сделать?

2. @Mark Я обновил свой ответ.