我有一个由零简单定义的充满零的大型数组:
BigArray = np.zeros((100,1000,1000),np.float16)
然后我有一个3D体积,可以在python外随机旋转,每次旋转时,我都希望将文件导入python并将其添加到数组的下一位。我目前有以下代码可以做到:
n = 0
while n < 99:
Zaxisangle = randint(0,360)
Yaxisangle = randint(0,360)
Xaxisangle = randint(0,360)
os.system('rotatevol -angles {},{},{} -input {} -output {}'.format(Zaxisangle, Yaxisangle, Xaxisangle,
MRCfilewithextension, MRCforoutput))
particledata = mrcopen(MRCforoutput)
if n < 10:
ArtTomo[:, 0:100, (100*(n+1))-100:100*(n+1)] = particledata
n = n+1
else:
n = n+1
就本示例而言,我们可以将其简化为以下内容:
BigArray = np.zeros((100,1000,1000),np.float16)
particledata = np.random.rand(100,100,100)
n = 0
while n < 99:
if n < 10:
ArtTomo[:, 0:100, (100*(n+1))-100:100*(n+1)] = particledata
n = n+1
elif: 10 < n < 20
ArtTomo[:, 100:200, (100*(n+1))-100:100*(n+1)] = particledata
n = n+1
else:
n = n+1
然后,我将为每个“行”编写很多elif语句。因为我要遍历具有不同文件的数组,所以我不能简单地用'inrange(0,1000,100)'语句烦人地填充它。
虽然我可以写出所有的elif语句,但是我似乎必须要有一种更有效的方式来编写此代码,我只是不够好看。任何人都可以用更好的方式编写此代码,还是我只需要编写10个Elif语句(我只是觉得它不是整洁的代码!)。
答案 0 :(得分:0)
如果我理解正确,我认为您的写作可以表达为:
BigArray = np.zeros((100,1000,1000),np.float16)
particledata = np.random.rand(100,100,100)
n = 0
while n < 99:
start = 100 * (n // 10)
ArtTomo[:, start:start+100, (100*(n+1))-100:100*(n+1)] = particledata
n = n+1