2016-09-10 7 views
2

У меня есть массив NxM numpy, заполненный нулями, и массив 1D numpy размером N со случайными целыми числами от 0 до M-1. Как вы можете видеть, размерность массива соответствует числу строк в матрице. Каждый элемент в целочисленном массиве означает, что в этой заданной позиции в соответствующей строке должна быть установлен в 1. Например:Как использовать другой индекс для каждой строки в массиве numpy?

# The matrix to be modified 
a = np.zeros((2,10)) 
# Indices array of size N 
indices = np.array([1,4]) 
# Indexing, the result must be 
a = a[at indices per row] 
print a 

[[0, 1, 0, 0, 0, 0, 0, 0, 0, 0], 
[0, 0, 0, 0, 1, 0, 0, 0, 0, 0]] 

Я попытался с помощью индексации a[:,indices] но это устанавливает одни и те же индексы для каждой строки, и это наконец, устанавливает все строки с единицами. Как установить данный индекс на 1 за строку?

ответ

2

Использование np.arange(N) для решения строк и индексы для столбцов:

>>> a[np.arange(2),indices] = 1 
>>> a 
array([[ 0., 1., 0., 0., 0., 0., 0., 0., 0., 0.], 
     [ 0., 0., 0., 0., 1., 0., 0., 0., 0., 0.]]) 

Или:

>>> a[np.where(indices)+(indices,)] = 1 
>>> a 
array([[ 0., 1., 0., 0., 0., 0., 0., 0., 0., 0.], 
     [ 0., 0., 0., 0., 1., 0., 0., 0., 0., 0.]]) 
+0

Fantastic. Это означает, что я должен узнать разницу между доступом к строке путем простой нарезки как 0: 2 или просто: для всех строк) и дать индексам доступ к строкам и столбцам в виде пар для установки значения. –

+0

@AlejandroSazo Да, действительно, также не то, что вы можете передавать индексы столбцов и строк в виде кортежа в массив. Так, например, 'a [np.where (индексы) + (индексы,)] = 1' будут выполнять ту же работу. – Kasramvd

 Смежные вопросы

  • Нет связанных вопросов^_^