Numpy вопрос относительно доступа к элементам - PullRequest
0 голосов
/ 22 ноября 2018

Итак, я создал массив из 3 вложенных списков (по крайней мере, я думаю, что это массив из 3 списков), и я хочу получить доступ к трем диагональным элементам в нем.Я создал массив, но как мне получить доступ к трем диагональным элементам в нем?

from numpy import *
test1 = arange(27).reshape(3,3,3)
test1

Результат:

array([[[ 0,  1,  2],
      [ 3,  4,  5],
      [ 6,  7,  8]],

     [[ 9, 10, 11],
      [12, 13, 14],
      [15, 16, 17]],

     [[18, 19, 20],
      [21, 22, 23],
      [24, 25, 26]]])

Ответы [ 2 ]

0 голосов
/ 22 ноября 2018

Есть несколько способов достичь своей цели.Здесь я остановлюсь на использовании логической маски.

Сначала создайте логическую матрицу логики 3х3: то есть диагональ - «Истина», а 2. каждая недиагональная запись - «Ложь».Затем наложите логическую маску на исходный ndarray, чтобы получить диагонали.

import numpy as np
test1 = np.arange(27).reshape(3,3,3)

>>> diag = np.eye(3, dtype=bool)
>>> test1[:, diag]
array([[ 0,  4,  8],
       [ 9, 13, 17],
       [18, 22, 26]])

Как видите, это дает двумерный массив, где каждая строка соответствует диагонали нулевого, первого и второго двумерного массива вваш 3d массив.

В качестве исключения, избегайте import *, это является причиной многих головных болей, потому что если разрушает абстракцию пространства имен, которую вы имеете.В приведенном выше примере, что если numpy определил функцию или переменную diag?То же самое, если вы импортируете другой пакет после numpy и он имеет собственную функцию arange, вы будете использовать функцию arange numpy.Предпочитаю явный импорт звездочкам.

0 голосов
/ 22 ноября 2018

Вот подход к пониманию списка:

>>> [np.diagonal(i) for i in test1]
[array([0, 4, 8]), array([ 9, 13, 17]), array([18, 22, 26])]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...