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

2024-09-30 22:18:40 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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(01000100)”语句填充数组

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


Tags: 文件代码npzeros数组语句randintelif
1条回答
网友
1楼 · 发布于 2024-09-30 22:18:40

如果我理解正确的话,我认为你所写的可以表达为:

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

相关问题 更多 >