如何在Python中编写for循环批量处理m=0、1以生成目标输出?
问题描述
能否编写一个for循环,让下方代码自动生成m=0、1时的输出?目前我手动设置m=0和m=1运行代码,现将现有代码、当前输出及预期输出展示如下:
现有代码
import numpy as np T2=[[0, 3, 5, 8, 9, 10, 11],[0, 2, 3, 5, 6, 8, 9, 10, 11]] X=np.array([np.array([4.17551036e+02, 3.53856161e+02, 2.82754301e+02, 1.34119055e+02, 6.34573886e+01, 2.08344718e+02, 1.00000000e-24]) , np.array([4.17551036e+02, 3.32821605e+02, 2.94983702e+02, 2.78809292e+02, 1.26991664e+02, 1.36026510e+02, 8.31512525e+01, 2.07329562e+02, 1.00000000e-24]) ], dtype=object) C1=0.0 index=0 m=0/1 for j in range(T2[m][-1]): if(j!=T2[m][index]): X[m] = np.insert(X[m], j, C1, axis=None) else: index+=1 print([X[m]])
当前输出
m=0: [array([4.17551036e+02, 0.00000000e+00, 0.00000000e+00, 3.53856161e+02, 0.00000000e+00, 2.82754301e+02, 0.00000000e+00, 0.00000000e+00, 1.34119055e+02, 6.34573886e+01, 2.08344718e+02, 1.00000000e-24])] m=1: [array([4.17551036e+02, 0.00000000e+00, 3.32821605e+02, 2.94983702e+02, 0.00000000e+00, 2.78809292e+02, 1.26991664e+02, 0.00000000e+00, 1.36026510e+02, 8.31512525e+01, 2.07329562e+02, 1.00000000e-24])]
预期输出
array([array([4.17551036e+02, 0.00000000e+00, 0.00000000e+00, 3.53856161e+02, 0.00000000e+00, 2.82754301e+02, 0.00000000e+00, 0.00000000e+00, 1.34119055e+02, 6.34573886e+01, 2.08344718e+02, 1.00000000e-24]), array([4.17551036e+02, 0.00000000e+00, 3.32821605e+02, 2.94983702e+02, 0.00000000e+00, 2.78809292e+02, 1.26991664e+02, 0.00000000e+00, 1.36026510e+02, 8.31512525e+01, 2.07329562e+02, 1.00000000e-24]) ],dtype=object)
解决方案
在外层添加遍历m的循环,同时每次循环重置index变量(避免处理m=1时沿用m=0的index值导致逻辑错误),最后直接输出处理后的X数组即可——因为X本身就是dtype=object类型,输出格式完全匹配预期。
修改后的代码如下:
import numpy as np T2=[[0, 3, 5, 8, 9, 10, 11],[0, 2, 3, 5, 6, 8, 9, 10, 11]] X=np.array([np.array([4.17551036e+02, 3.53856161e+02, 2.82754301e+02, 1.34119055e+02, 6.34573886e+01, 2.08344718e+02, 1.00000000e-24]) , np.array([4.17551036e+02, 3.32821605e+02, 2.94983702e+02, 2.78809292e+02, 1.26991664e+02, 1.36026510e+02, 8.31512525e+01, 2.07329562e+02, 1.00000000e-24]) ], dtype=object) C1=0.0 # 遍历m=0和m=1 for m in range(2): index=0 # 每次循环重置index for j in range(T2[m][-1]): if(j!=T2[m][index]): X[m] = np.insert(X[m], j, C1, axis=None) else: index+=1 # 直接输出X,得到预期格式 print(X)
运行后输出将与预期完全一致。
内容的提问来源于stack exchange,提问作者AEinstein
相关产品推荐
相关产品推荐

