Избежание цикла в многомерном массиве - PullRequest
0 голосов
/ 31 августа 2018

Итак, у меня есть 3D-массив:

>>> img_data.shape
(182, 218, 182)

Моя идея состоит в том, чтобы заменить каждое значение, равное 0, на 255. Я пытался:

new_img = np.zeros(img_range)
print(new_img.shape)
for i in range(img_range[0]):
    for j in range(img_range[1]):
        for k in range(img_range[2]):
            print "%s %s %s" % (i, j, k )
            if img_data[i][j][k] == 0:
                new_img[i][j][k] = 2
            else:
                new_img[i][j][k] = img_data[i][j][k]

Но это займет вечность, скорее всего, потому что Python динамичен и может что-то делать на заднем плане.

Есть идеи, как это улучшить? Спасибо, Родриго

1 Ответ

0 голосов
/ 01 сентября 2018

Вам не нужно писать свой собственный цикл. Вы можете получить доступ ко всем элементам, относящимся к одному или нескольким условиям, используя квадратные скобки []. Проверьте индексацию логического массива .

Пример:

import numpy as np

a = np.random.randint(0, 5, size=(10, 10, 10))
a[a == 0] = -100
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...