Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python-从文件中读取numpy数组_Python_Numpy - Fatal编程技术网

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
),其中包含一些结果(为了简单起见,我在请求的开头添加了确切的格式,只是更改了数据)。矩阵和向量包含浮点数。星星里面的数字是整数。希望这能回答你的问题