我有一个如下所示的下三角矩阵
1
2 3
4 5 6
在一个文本文件中,我想将其读入一个numpy数组,并在主对角线上方填充零。我能想到的最简单的代码是:
import io
import scipy
data = "1\n2 3\n4 5 6"
scipy.genfromtxt(io.BytesIO(data.encode()))
失败并返回
ValueError: Some errors were detected !
Line #2 (got 2 columns instead of 1)
Line #3 (got 3 columns instead of 1)
这很有道理,因为在文本文件中,矩阵的上对角线部分没有任何内容,所以numpy不知道如何解释缺失值。
查看文档,我想要类似
invalid_raise = False
选项的东西,但我不想跳过“无效”的行。
通过对下面答案的一些修改,我正在使用的最终代码是:
import scipy
with open("data.txt", "r") as r:
data = r.read()
n = data.count("\n") + 1
mat = scipy.zeros((n, n))
mat[scipy.tril_indices_from(mat)] = data.split()
n = data.count("\n") + 1
而不是拆分字符串,但结果是一样的。此外,您不需要在拆分之前替换换行符,因为不带参数的string.split()
会以所有空白字符进行拆分。请查看我的答案,以获取最终使用的代码。 - Michael A