Создать представление массива для конкретных элементов - PullRequest
0 голосов
/ 27 февраля 2019

Есть ли способ создать представление для numpy.ndarray, которое будет возвращать только определенные элементы определенной формы?

Я работаю над проектом с матрицей тензора напряжений материала.Я создал ndarray подкласс, который должен поддерживать форму 3x3 для своей базы.Однако есть один модуль, который требует, чтобы тензор был в записи Фойгта.К сожалению, это нелегко сделать с помощью простой функции reshape из-за порядка элементов в матрице.

Notation Convention

Я хотел быбыть в состоянии сохранить один подкласс ndarray и просто создать отдельное представление для вычислений, требующих этой записи.

На данный момент лучшее, что я смог придумать, - это создать функцию, котораясоздает и возвращает новый массив из свойства data экземпляра.Обычно это не имеет большого значения, но вычисления, для которых он мне нужен, должны выполняться миллионы раз.

1 Ответ

0 голосов
/ 27 февраля 2019

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

В этом примере я создаю матрицу Eye и из нее создаю View по диагонали

tensor = np.eye(3)

>>> diagonal_view = [i for i in range(3)], [i for i in range(3)]
>>> tensor[diagonal_view]
array([1., 1., 1.])

дляваш пример в форме матрицы, вы хотели бы что-то вроде этого

#             1. dimension , 2. dimension
voight_view = [0,1,2,1,2,0],[0,1,2,2,0,1] # voight notation # voight notation
>>> tensor[voight_view]
array([1., 1., 1., 0., 0., 0.])

Если вы не хотите ссылаться, просто используйте

array.copy()

Но кажется, чтопросто чистое задание тоже работает

new_array = tensor[voight_view]
...