Установите значения массива с помощью списка - PullRequest
0 голосов
/ 17 октября 2018

Я могу изменить набор значений матрицы NumPy, передавая индексы, которые я хочу изменить в форме списка, например, matrix[[some first indices], [some second indices]] = 1

Я пытаюсь сделать это, но только с одним спискоминдексов, а затем для каждого элемента этого списка в качестве первого индекса и весь список в качестве другого индекса.Вот пример:

import numpy as np

#Matrix
matrix = np.zeros((5,5))

# Indices
elements = [1,2,3]

# Way that works
for i in elements:
    matrix[i, elements] = 1

Я хотел бы сделать это как понимание списка, но я не могу понять, как, и, кроме того, я не уверен, является ли это хорошей практикой.Что-то вроде matrix[[(i,elements) for i in elements]] = 1

Также собираюсь сделать это с помощью itertools, например matrix[(itertools.permutation(elements, 2))] = 1.Но любой из этих подходов работает, и я не уверен, почему.

Ответы [ 2 ]

0 голосов
/ 17 октября 2018

Вам необходимо получить доступ к 2d-матрице с массивами строк и столбцов в качестве индекса:

import numpy as np
matrix = np.zeros((5,5))
elements = [1,2,3]
matrix[np.c_[elements], elements] = 1
# array([[0., 0., 0., 0., 0.],
#   [0., 1., 1., 1., 0.],
#   [0., 1., 1., 1., 0.],
#   [0., 1., 1., 1., 0.],
#   [0., 0., 0., 0., 0.]])
0 голосов
/ 17 октября 2018

Вы можете создать slice от первого до последнего элемента (+1) из elements (при условии, что заказано elements):

s = slice(elements[0], elements[-1]+1)

matrix[s, elements]= 1 
# [[0. 0. 0. 0. 0.]
# [0. 1. 1. 1. 0.]
# [0. 1. 1. 1. 0.]
# [0. 1. 1. 1. 0.]
# [0. 0. 0. 0. 0.]]
...