Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.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中转换为列表的矩阵_Python_List_Matrix - Fatal编程技术网

在python中转换为列表的矩阵

在python中转换为列表的矩阵,python,list,matrix,Python,List,Matrix,有一个具有Wolfram Mathematica矩阵样式的txt文件(可以是1000多个字符串): 我需要从中创建嵌套列表,以便在python中进行进一步计算。 结果应该是—— s=[[[0.00036], [1], [0], [1], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0]],[[0.0003],.. and so on 我是pytho

有一个具有Wolfram Mathematica矩阵样式的txt文件(可以是1000多个字符串):

我需要从中创建嵌套列表,以便在python中进行进一步计算。 结果应该是——

s=[[[0.00036], [1], [0], [1], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0]],[[0.0003],.. and so on

我是python新手,你能帮我吗

这里有一些代码,可以让换行符出现在您喜欢的任何地方。但是条目只能是浮点数

from ast import literal_eval
with open('filename') as f:
    lis = [[[abs(literal_eval(item))] for item in 
                     line.rstrip('},\n').lstrip('{').split(', ')] for line in f]
    print lis
...     
[[[0.00036], [1], [0], [1], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0]], [[0.0003], [1.00026], [2], [0], [1], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0]], [[0], [0.0002], [2], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0]]]
f = open("filename", "r")

buff = ""
array = []
for line in f:
    buff += line
    if "}" in line:
        start = buff.index("{")
        end = buff.index("}")
        array.append([float(val.strip()) for val in buff[start+1:end].split(",")])
        buff = buff[end+1:]

f.close()

print(array)
如果需要将算术表达式扩展到一级乘法,可以执行以下操作:

import operator

def prod(lst):
    return reduce(operator.mul, lst, 1)

f = open("filename", "r")

buff = ""
array = []
for line in f:
    buff += line
    if "}" in line:
        start = buff.index("{")
        end = buff.index("}")
        array.append([prod(float(factor.strip()) for factor in val.split("*")) for val in buff[start+1:end].split(",")])
        buff = buff[end+1:]

f.close()

print(array)

要了解发生了什么,请先看和。

这里有一些代码,可以让换行符出现在您喜欢的任何地方。但是条目只能是浮点数

f = open("filename", "r")

buff = ""
array = []
for line in f:
    buff += line
    if "}" in line:
        start = buff.index("{")
        end = buff.index("}")
        array.append([float(val.strip()) for val in buff[start+1:end].split(",")])
        buff = buff[end+1:]

f.close()

print(array)
如果需要将算术表达式扩展到一级乘法,可以执行以下操作:

import operator

def prod(lst):
    return reduce(operator.mul, lst, 1)

f = open("filename", "r")

buff = ""
array = []
for line in f:
    buff += line
    if "}" in line:
        start = buff.index("{")
        end = buff.index("}")
        array.append([prod(float(factor.strip()) for factor in val.split("*")) for val in buff[start+1:end].split(",")])
        buff = buff[end+1:]

f.close()

print(array)

要想了解发生了什么,先看看和。eval是邪恶的,但有时它有它的位置。因为输入数据包含算术表达式,
eval
是转换它的最简单方法

当然,不要在不受信任的输入上运行此代码,因为它可能会危害您的计算机。(如果这些都是你从Mathematica生成的东西,你应该很安全)

代码如下:

m = eval('[' + text.replace('{','[').replace('}',']') + ']')
m = [[[x] for x in row] for row in m]
111.txt
文件上运行此命令(使用
text=open('111.txt').read()
)会产生预期的结果:

[[[-0.00036], [1], [0], [1], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0]], [[0.0003], [-1.00026], [2], [0], [1], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0]], [[0], [0.0002], [-2], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0]], [[1e-05], [0], [0], [-1], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0]], [[0], [1e-05], [0], [0], [-1], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0]], [[5e-05], [0], [0], [0], [0], [-0.01], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0]], [[0], [5e-05], [0], [0], [0], [0], [-0.01], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0]], [[0], [0], [0], [0], [0], [0.01], [0], [-0.000344], [1], [0], [1], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0]], [[0], [0], [0], [0], [0], [0], [0.01], [0.0003], [-1.000244], [2], [0], [1], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0]], [[0], [0], [0], [0], [0], [0], [0], [0], [0.0002], [-2], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0]], [[0], [0], [0], [0], [0], [0], [0], [1e-05], [0], [0], [-1], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0]], [[0], [0], [0], [0], [0], [0], [0], [0], [1e-05], [0], [0], [-1], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0]], [[0], [0], [0], [0], [0], [0], [0], [3.4e-05], [0], [0], [0], [0], [-0.01], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0]], [[0], [0], [0], [0], [0], [0], [0], [0], [3.4e-05], [0], [0], [0], [0], [-0.01], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0]], [[0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0.01], [0], [-0.000328], [1], [0], [1], [0], [0], [0], [0], [0], [0]], [[0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0.01], [0.0003], [-1.000228], [2], [0], [1], [0], [0], [0], [0], [0]], [[0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0.0002], [-2], [0], [0], [0], [0], [0], [0], [0]], [[0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [1e-05], [0], [0], [-1], [0], [0], [0], [0], [0], [0]], [[0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [1e-05], [0], [0], [-1], [0], [0], [0], [0], [0]], [[0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [1.8e-05], [0], [0], [0], [0], [-0.01], [0], [0], [0], [0]], [[0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [1.8e-05], [0], [0], [0], [0], [-0.01], [0], [0], [0]], [[0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0.01], [0], [-0.0003], [1], [0]], [[0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0.01], [0.0003], [-1.0002], [2]], [[0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0.0002], [-2]]]

eval
是邪恶的,但有时它也有它的位置。因为输入数据包含算术表达式,
eval
是转换它的最简单方法

当然,不要在不受信任的输入上运行此代码,因为它可能会危害您的计算机。(如果这些都是你从Mathematica生成的东西,你应该很安全)

代码如下:

m = eval('[' + text.replace('{','[').replace('}',']') + ']')
m = [[[x] for x in row] for row in m]
111.txt
文件上运行此命令(使用
text=open('111.txt').read()
)会产生预期的结果:

[[[-0.00036], [1], [0], [1], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0]], [[0.0003], [-1.00026], [2], [0], [1], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0]], [[0], [0.0002], [-2], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0]], [[1e-05], [0], [0], [-1], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0]], [[0], [1e-05], [0], [0], [-1], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0]], [[5e-05], [0], [0], [0], [0], [-0.01], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0]], [[0], [5e-05], [0], [0], [0], [0], [-0.01], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0]], [[0], [0], [0], [0], [0], [0.01], [0], [-0.000344], [1], [0], [1], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0]], [[0], [0], [0], [0], [0], [0], [0.01], [0.0003], [-1.000244], [2], [0], [1], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0]], [[0], [0], [0], [0], [0], [0], [0], [0], [0.0002], [-2], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0]], [[0], [0], [0], [0], [0], [0], [0], [1e-05], [0], [0], [-1], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0]], [[0], [0], [0], [0], [0], [0], [0], [0], [1e-05], [0], [0], [-1], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0]], [[0], [0], [0], [0], [0], [0], [0], [3.4e-05], [0], [0], [0], [0], [-0.01], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0]], [[0], [0], [0], [0], [0], [0], [0], [0], [3.4e-05], [0], [0], [0], [0], [-0.01], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0]], [[0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0.01], [0], [-0.000328], [1], [0], [1], [0], [0], [0], [0], [0], [0]], [[0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0.01], [0.0003], [-1.000228], [2], [0], [1], [0], [0], [0], [0], [0]], [[0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0.0002], [-2], [0], [0], [0], [0], [0], [0], [0]], [[0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [1e-05], [0], [0], [-1], [0], [0], [0], [0], [0], [0]], [[0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [1e-05], [0], [0], [-1], [0], [0], [0], [0], [0]], [[0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [1.8e-05], [0], [0], [0], [0], [-0.01], [0], [0], [0], [0]], [[0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [1.8e-05], [0], [0], [0], [0], [-0.01], [0], [0], [0]], [[0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0.01], [0], [-0.0003], [1], [0]], [[0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0.01], [0.0003], [-1.0002], [2]], [[0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0], [0.0002], [-2]]]


在文本文件的一行上总是恰好有一行数组吗?不,有时它可以跳转,但仍然有{}您的原始数据,因为发布在Ashwinis答案下包含算术表达式!你应该考虑使用或类似的东西。是的,对不起,我没注意到,是我的错。你能帮我处理原始数据吗?在Dropbox上的文件有我所需要的。当然,DmitriyButenko:如果你想做进一步的计算,可以考虑使用NUMPY。在处理数字矩阵时,它将提供速度和灵活性。文本文件的一行上是否总是正好有一行数组?不,有时它可以跳转,但仍然有{}您的原始数据,如Ashwinis答案下发布的包含算术表达式!你应该考虑使用或类似的东西。是的,对不起,我没注意到,是我的错。你能帮我处理原始数据吗?在Dropbox上的文件有我所需要的。当然,DmitriyButenko:如果你想做进一步的计算,可以考虑使用NUMPY。使用数字矩阵时,它将提供速度和灵活性。
Traceback(最近一次调用最后一次):文件“/Users/twillightwind/Desktop/mas/prog.pyw”,第6行,在.rstrip('}、\n').lstrip('{').split(','))中的项中,在f]文件“/System/Library/Frameworks/Python.framework/Versions/2.7/ast.py”中的行,第49行,在literal_eval File“/System/Library/Frameworks/Python.Frameworks/Versions/2.7/lib/python2.7/ast.py”中,第37行,在解析文件“”中,第10行,^SyntaxError:invalid syntax[Finished]
@dmitriybtenko请发布文件的实际内容,我的回答对样本数据很有效。@Ashwini:OP在评论中说行可以跨越多行。这可能就是问题所在。@unutbu实际数据包含类似于
3.40*0.00001
,我想这是引起错误的原因。@Ashwini:行以
\r
结尾,而不是
\n
回溯(最后一次调用):文件“/Users/twillightwind/Desktop/mas/prog.pyw”,第6行,在.rstrip('}、\n').lstrip('{)行的项中.split(“,”)]f]文件“/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/ast.py”中的第49行“/System/Library/Frameworks/Python.Frameworks/Versions/2.7/ast.py”,第37行,解析文件“,”第10行,^syntaxer:无效语法[已完成]@Dmitriybteneko请您发布文件的实际内容,我的答案适用于样本数据。@Ashwini:OP在评论中说行可能跨越多行。这可能就是问题所在。@unutbu实际数据包含类似于
3.40*0.00001
,我想这可能会引起错误。@Ashwini:行以
\r
结尾,而不是
\n
。是的,这适用于没有nm结构的文件,谢谢!嗯,nm解析仍然有一个问题。@DmitriyButenko:我现在也添加了这个。非常感谢!这完全解决了我的问题,也感谢链接,现在我知道它是如何工作的。是的,这对没有nm结构的文件有效,谢谢!嗯,nm解析仍然有一个问题。@DmitriyButenko:我现在也添加了这个。非常感谢!这完全解决了我的问题,也感谢链接,现在我知道它是如何工作的了。