Доступ ко всем нечетным индексам трехмерной матрицы, а затем даже к более эффективному - PullRequest
0 голосов
/ 28 марта 2020

Итак, у меня есть 3D numpy матрица, в которой я хочу сначала получить доступ только к нечетным индексам, а затем, как только я получу доступ ко всем нечетным, я затем хочу получить доступ к четным. На данный момент для этого у меня есть два тройных вложенных цикла, но это очень медленно. То, что у меня есть на данный момент, можно увидеть ниже. Первые операторы if - потому что мне не нужно обращаться к краю куба. Также я собираюсь сделать что-то еще с Матрицей [i, j, k] и сделать его равным просто числу, но моя проблема - получить доступ к коэффициентам, а затем к эффектам.

        for i in range(self.size):
            for j in range(self.size):
                for k in range(self.size):
                    if i==0 or i==(self.size-1) or j==0 or j==(self.size-1) or k==0 or k==(self.size-1): 
                        pass
                    elif (i+j+k)% 2==1:
                         Matrix[i,j,k]=2

                    else:
                        pass

        for i in range(self.size):
            for j in range(self.size):
                for k in range(self.size):
                    if i==0 or i==(self.size-1) or j==0 or j==(self.size-1) or k==0 or k==(self.size-1): 
                        pass
                    elif (i+j+k)% 2==0:
                         Matrix[i,j,k]=4
                    else:
                        pass 

1 Ответ

0 голосов
/ 28 марта 2020

Вы используете остаток суммы, но это не обязательно дает вам нечетное или четное, потому что нечетное + нечетное + четное будет четным числом. Тем не менее, вы можете использовать тот факт, что NumPy поддерживает не только скаляры в качестве индексов. А также вы можете не использовать if с pass, если вы укажете range(1, self.size-1). Вы можете использовать следующий код:

Matrix[range(1,self.size-1,2),range(1,self.size-1,2),range(1,self.size-1,2)]=2
Matrix[range(2,self.size-1,2),range(2,self.size-1,2),range(2,self.size-1,2)]=2

Третий параметр позволяет вам повторять каждое второе число

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...