【发布时间】:2022-01-07 13:58:05
【问题描述】:
我有一个包含此信息列的文件
1.0000000000000002
0.6593496737729044
1.0000000000000002
我可以从文件中读取这些数据,我想从中形成一个 2*2 的矩阵。我尝试了很多,但我得到了错误的输出。
my code
with open("final_overlap.txt", "r") as final_over:
for i in range(2):
for j in range(2):
i = final_over.readline()
j = final_over.readline()
S = np.array([i,j])
print(S)
The output I want like this.
[[1.0000000000000002 0.6593496737729044]
[0.6593496737729044 1.0000000000000002]]
How can I form this matrix.
Take into account that I have another input, and it has more info, so I want a method that can form a different matrix not only 2*2.
Like this input too
1 1 1.0000000000000002
2 1 0.6593496737729044
2 2 1.0000000000000002
3 1 0.1192165290691592
3 2 0.0954901018165798
3 3 1.0000000000000002
4 1 0.0954901018165798
4 2 0.1192165290691592
4 3 0.6593496737729044
4 4 1.0000000000000002
and the matrix will be 4*4
关于矩阵的另一个问题。我得到了正确的答案,但如果我有这样的输入。 `
1 1 1 1 0.7746059439198979
2 1 1 1 0.4441350695399573
2 1 2 1 0.2970603935859659
2 2 1 1 0.5696940113278337
2 2 2 1 0.4441350695399575
2 2 2 2 0.7746059439198979
我尝试使用此代码,但出现错误“列表索引超出范围”
for line in open('Two_Electron.txt'):
r,c,d,e,v = line.split()
r = int(r)-1
c = int(c)-1
d = int(d)-1
e = int(e)-1
v = float(v)
if c == 0:
data.append( [v] )
else:
data[-1].append(v)
print(data)
# Fill in the upper triangle.
for i in range(len(data)-1):
for j in range(i+1,len(data)):
data[i].append( data[j][i] )
for k in range(len(data)-1):
for l in range(k+1,len(data)):
data[k].append( data[l][k] )
V_ee = np.array(data)
我应该得到的输出。
[[[[0.77460594 0.4441351 ]
[0.4441351 0.56969403]]
[[0.4441351 0.29706043]
[0.29706043 0.4441351 ]]]
[[[0.4441351 0.29706043]
[0.29706043 0.4441351 ]]
[[0.56969403 0.4441351 ]
[0.4441351 0.77460594]]]]
【问题讨论】:
-
您对这个问题的描述很糟糕。显然,您在这里拥有的是一个下三角矩阵。您希望上三角为零,还是真的希望它是下三角的反射?
-
@TimRoberts 不,我有我在帖子中添加的最后一个输入,其中第一列和第二列是我想要形成的矩阵的索引,但正如你在输入中看到的那样,并非所有元素都写入输入,因为某些值与 2,1 索引 == 1,2 索引相同,所以我想做一个循环或代码,可以形成一个矩阵,无论大小是多少
-
但是,你看,不仅仅是“不是所有的元素都写好了”。这是一种非常特殊的格式。您在主对角线上有 1。对角线以下的所有元素都存在,对角线以上的所有元素都不存在。那是一个“下三角矩阵”。我假设您只希望下三角形穿过对角线反射到上三角形,这就是我在下面所做的。
-
@TimRoberts 没错。现在是正确的。这就是我想要的非常感谢您
-
@TimRoberts。对此感到抱歉。我在帖子中做了另一个编辑。你能看出我的错误是什么吗?提前谢谢你。