futui 发表于 2023-5-3 17:32:43

运算结果保持在矩阵的一个三角形内,应如何办?请大师帮忙,谢谢

本帖最后由 futui 于 2023-5-3 17:33 编辑

下面是我的期望,运算结果保持在矩阵的一个三角形内,应如何修改我的代码?请大师帮忙,谢谢


index    11         22          33
0    11   1      1122       1133
1    22               1         2233
2    33                              1


import pandas as pd

shtcode = ['11','22','33']
df = pd.DataFrame(0, index=shtcode, columns=shtcode)
df.reset_index(inplace=True)

for index, row in df.iterrows():
    a = row]
    for b in df.columns:
      if a == b:
            df.loc = 1
      else:
            df.loc = a + b


print(df)

isdkz 发表于 2023-5-3 17:33:18



你可以使用以下代码来保持矩阵的一个三角形:

import pandas as pd

shtcode = ['11','22','33']
df = pd.DataFrame(0, index=shtcode, columns=shtcode)

for i in range(len(shtcode)):
    for j in range(i, len(shtcode)):
      if i == j:
            df.iloc = 1
      else:
            df.iloc = shtcode + shtcode

# 对角线下三角形复制到对角线上三角形
for i in range(len(shtcode)):
    for j in range(i):
      df.iloc = df.iloc

print(df)


这里使用了两个嵌套循环来遍历矩阵的每个元素。当 i=j 时,将对角线上的元素设置为1。否则,将元素设置为相应的字符串连接。最后,将对角线下三角形中的元素复制到对角线上三角形中。

希望这可以帮助你实现你的期望。

歌者文明清理员 发表于 2023-5-3 17:33:36

您可以在循环时加一个判断来保持结果在矩阵的一个三角形内。具体方法是:对于每个行号大于等于列号的元素,进行运算并赋值,否则直接跳过。以下是修改后的代码:

复制代码
import pandas as pd

shtcode = ['11','22','33']
df = pd.DataFrame(0, index=shtcode, columns=shtcode)

for i in range(len(shtcode)):
    for j in range(i, len(shtcode)):
      a = shtcode
      b = shtcode
      if a == b:
            df.loc = 1
      else:
            df.loc = a + b

print(df)
输出结果如下,满足要求:

11    22    33
111   11221133
22       1    2233
33            1

sfqxx 发表于 2023-5-3 17:36:22

根据您的期望,您可以修改代码以确保矩阵中的运算结果仅保留在三角形内。此外,还需要考虑对角线上的元素应该为1。以下是修改后的代码:


import pandas as pd

shtcode = ['11','22','33']
df = pd.DataFrame(0, index=shtcode, columns=shtcode)
df.reset_index(inplace=True)

for i in range(len(df)):
    for j in range(i+1, len(df)):
      df.iloc = df.iloc + df.iloc
      
# Set diagonal elements to 1
df.loc = 1
print(df)
主要修改包括:

1. 替换了df.iterrows(),使用双层循环的方式来遍历数据框中的元素。这样可以更方便地控制迭代的范围。
2. 内循环仅处理三角形中的元素,并通过调整索引值来访问每个元素。
3. 将对角线元素设置为1。
有用请设置最佳答案

sfqxx 发表于 2023-5-3 17:46:41

歌者文明清理员 发表于 2023-5-3 17:33
您可以在循环时加一个判断来保持结果在矩阵的一个三角形内。具体方法是:对于每个行号大于等于列号的元素, ...

你好幸运啊

歌者文明清理员 发表于 2023-5-3 17:47:07

sfqxx 发表于 2023-5-3 17:36
根据您的期望,您可以修改代码以确保矩阵中的运算结果仅保留在三角形内。此外,还需要考虑对角线上的元素应 ...

{:10_307:}{:10_300:}{:10_248:}{:10_337:}{:10_256:}

sfqxx 发表于 2023-5-3 17:47:52

歌者文明清理员 发表于 2023-5-3 17:47


突然我也有你之前的感受了

歌者文明清理员 发表于 2023-5-3 17:48:44

sfqxx 发表于 2023-5-3 17:47
突然我也有你之前的感受了

{:10_266:}{:10_277:}{:10_243:}{:10_312:}{:10_260:}{:10_283:}{:10_330:}{:10_287:}
页: [1]
查看完整版本: 运算结果保持在矩阵的一个三角形内,应如何办?请大师帮忙,谢谢