Перебор большого массива с одинаковыми по размеру, но меньшими массивами - PullRequest
0 голосов
/ 18 января 2019

У меня есть большой массив, полный нулей, просто определяемый как:

BigArray = np.zeros((100,1000,1000),np.float16)

Затем у меня есть трехмерный том, который я произвольно поворачиваю за пределами 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 элифных отчетов (я просто не чувствую, что это аккуратный код!).

1 Ответ

0 голосов
/ 18 января 2019

Если я правильно понимаю, я думаю, что вы пишете, можно просто выразить как:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...