I have a large array full of zeros simply defined by:
BigArray = np.zeros((100,1000,1000),np.float16)
I then have a 3D volume that I randomly rotate outside of python and each time it is rotated I want to import the file into python and add it to the next bit of the array. I currently have the following code that will do it:
n = 0while 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
For the purpose of this example we can simplify it down to the following:
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
I would then write lots of elif statements for each ‘row’. Because I am iterating through the array with different files I can’t simply fill it with a ‘in range(0,1000,100)’ statement annoyingly.
whilst I can write out all the elif statements I feel as if there must be a more efficient way to write this code I am just not good enough to see it. Could anyone else write this in a nicer way or am I just going to have to write 10 elif statments (i just don’t feel like it is neat code!).
#python #numpy