Iterating through a large array filling it with identically sized, but different, smaller arrays

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 = 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 &lt; 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

3 Likes2.10 GEEK