鱼C论坛

 找回密码
 立即注册
查看: 2145|回复: 7

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

[复制链接]
发表于 2023-5-3 17:32:43 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 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[df.columns[0]]
    for b in df.columns[1:]:
        if a == b:
            df.loc[index, b] = 1
        else:
            df.loc[index, b] = a + b


print(df)
最佳答案
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[i]
        b = shtcode[j]
        if a == b:
            df.loc[a, b] = 1
        else:
            df.loc[a, b] = a + b

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

11    22    33
11  1   1122  1133
22       1    2233
33            1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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[i,j] = 1
        else:
            df.iloc[i,j] = shtcode[i] + shtcode[j]

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

print(df)

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

希望这可以帮助你实现你的期望。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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[i]
        b = shtcode[j]
        if a == b:
            df.loc[a, b] = 1
        else:
            df.loc[a, b] = a + b

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

11    22    33
11  1   1122  1133
22       1    2233
33            1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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[i,j] = df.iloc[i,j-1] + df.iloc[j-1,j]
        
# Set diagonal elements to 1
df.loc[df.index, df.columns] = 1
print(df)
主要修改包括:

1. 替换了df.iterrows(),使用双层循环的方式来遍历数据框中的元素。这样可以更方便地控制迭代的范围。
2. 内循环仅处理三角形中的元素,并通过调整索引值来访问每个元素。
3. 将对角线元素设置为1。
有用请设置最佳答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

你好幸运啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-3 17:47:52 | 显示全部楼层

突然我也有你之前的感受了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-3 17:48:44 | 显示全部楼层
sfqxx 发表于 2023-5-3 17:47
突然我也有你之前的感受了

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-23 11:22

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表