首页 > 解决方案 > 迭代一个大数组,用大小相同但不同的较小数组填充它

问题描述

我有一个充满零的大数组,简单地定义为:

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 语句。因为我正在使用不同的文件遍历数组,所以我不能简单地用“in range(0,1000,100)”语句填充它,这很烦人。

虽然我可以写出所有 elif 语句,但我觉得好像必须有一种更有效的方法来编写这段代码,但我只是不够好,看不到它。其他人能否以更好的方式编写此代码,或者我只需要编写 10 个 elif 语句(我只是不觉得它是整洁的代码!)。

标签: pythonnumpy

解决方案


如果我理解正确,我认为您所写的内容可以表达为:

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

推荐阅读