遍历一个大数组,以相同大小但不同的较小数组填充它

时间:2019-01-18 14:52:26

标签: python numpy

我有一个由零简单定义的充满零的大型数组:

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语句(我只是觉得它不是整洁的代码!)。

1 个答案:

答案 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