Python-从文件中读取numpy数组
我有一个输入文件格式如下:Python-从文件中读取numpy数组,python,numpy,Python,Numpy,我有一个输入文件格式如下: * 1 * [[1.0 2.0 3.0 4.0] [ 5.0 6.0 7.0 8.0]] [1.5 2.5 3.5] * 2 * [[8.0 7.0 6.0 5.0] [ 1.0 2.0 3.0 4.0]] [4.5 5.5 6.5] 矩阵和向量的大小未知。我想把星内的数字、矩阵和向量分成3个不同的变量(it、mtx、vect) 我想知道是否有一种简单的方法来读取numpy.array中的矩阵和向量? 我成功地获得了星体内部的数字,但是对于有矩阵mtx和向量vec
* 1 *
[[1.0 2.0 3.0 4.0] [ 5.0 6.0 7.0 8.0]] [1.5 2.5 3.5]
* 2 *
[[8.0 7.0 6.0 5.0] [ 1.0 2.0 3.0 4.0]] [4.5 5.5 6.5]
矩阵和向量的大小未知。我想把星内的数字、矩阵和向量分成3个不同的变量(it
、mtx
、vect
)
我想知道是否有一种简单的方法来读取numpy.array中的矩阵和向量?
我成功地获得了星体内部的数字,但是对于有矩阵mtx
和向量vect
的行,我找不到一种快速而正确的方法
这里是我的代码示例,我试图获取向量,但出现了以下错误ValueError:使用序列设置数组元素。
:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import numpy
import re
def read(filename):
it = 0
with open(filename, 'r') as f:
for line in f:
if line[0] == '*':
it += 1
v_it = numpy.zeros((it)).astype(numpy.int32)
mtx = numpy.array((it,)).astype(numpy.float32)
vect = numpy.array((it,)).astype(numpy.float32)
a = 0
with open(filename, 'r') as f:
for line in f:
if line[0] == '*':
print int(line[2:-2])
v_it[a] = int(line[2:-2])
elif line[:2] == '[[':
idx = line.index(']]')
line = line[idx+4:-2]
line = re.sub(r'\s+', ' ', line)
vect[a] = numpy.fromstring(line, dtype=numpy.float32, sep=' ')
print vect[a]
elif line == '':
a += 1
print a
print vect
if __name__ == "__main__":
read('input.txt')
如果有人能告诉我如何读取向量(或者至少使用哪个库),我也应该能够读取矩阵。
任何帮助都将不胜感激因为我找到了一个解决方案,我将分享它,以防有人需要处理相同的问题 我将
vect
从numpy.array
更改为[]
。
然后我在vect
中一次附加一个向量。
最后,我将vect
转换为numpy.array
此处是更改的行(在之前的注释中):
最后,我得到了一个2D numpy.array,其中包含输入文件中的向量。当我找到解决方案时,我会共享它,以防有人需要处理相同的问题 我将
vect
从numpy.array
更改为[]
。
然后我在vect
中一次附加一个向量。
最后,我将vect
转换为numpy.array
此处是更改的行(在之前的注释中):
最后,我得到了一个2D numpy.array,其中包含输入文件中的向量。您也可以使用pandas并执行以下操作:
import pandas as pd
H = pd.read_csv('test.txt',header=None)
blocks = H[1::2].as_matrix()
names = H[::2].as_matrix()
v_it = [int(i[0][2:-2]) for i in names]
mtx = []
vect = []
for i in blocks:
imtx, ivect = eval(i[0].replace(' ', ',').replace('[,','['))
mtx.append(imtx)
vect.append(ivect)
你也可以用熊猫做这样的事情:
import pandas as pd
H = pd.read_csv('test.txt',header=None)
blocks = H[1::2].as_matrix()
names = H[::2].as_matrix()
v_it = [int(i[0][2:-2]) for i in names]
mtx = []
vect = []
for i in blocks:
imtx, ivect = eval(i[0].replace(' ', ',').replace('[,','['))
mtx.append(imtx)
vect.append(ivect)
文件格式是什么?该文件只是一个文本文件(
*.txt
),其中包含一些结果(为了简单起见,我在请求的开头添加了确切的格式,在这里我只需更改数据)。矩阵和向量包含浮点数。星星里面的数字是整数。希望这能回答您的问题,文件格式是什么?该文件只是一个文本文件(*.txt
),其中包含一些结果(为了简单起见,我在请求的开头添加了确切的格式,只是更改了数据)。矩阵和向量包含浮点数。星星里面的数字是整数。希望这能回答你的问题