2016-03-22 2 views
-1

Итак, у меня есть массив с множеством чисел (4950,3). Из этого массива мне нужно создать новый массив (матрицы), значения и индексы которого взяты из существующий массив.numpy создать новый 2D-массив из существующего массива, значения столбца в виде индексов

В частности,

Array1 = массив ([[0, 1, 0,4284256], [0, 2., 0,38090856], [1., 2., 0,32901526]]) ,

new Array2 [0,1] = 0.4284256 , Array2[0,2]=0.38090856 and Array2[1,2]= 0.32901526 

Сейчас я использую для цикла, но я имею в виду, там должен быть эффективным способом. A1 and A2 values

for i in range(A1.shape[0]): 
    A2[ A1[i,0], A1[i,1] ] = A1[i,2] 
+0

Что бы форму вашего нового массива? Не могли бы вы привести пример печати вашего Array2? Можно изменить размеры массивов, но есть правила относительно размеров. – armatita

+0

Вы хотите отобразить первые 2 элемента в * Array1 * в координатах в * Array2 *. Я не думаю, что ** изменить формулу ** поможет вам здесь. Лучше всего сделать цикл, или использовать * list comprehension * для более короткого кода. – davidshen84

+1

Но если он хочет это сделать, то почему третий элемент последней строки в массиве1 будет в позиции 1,2 в массиве2? Каково правило? – armatita

ответ

0

Это то, что вы ищете? Вы можете напрямую индексировать значения одного массива, используя значения Integer из другого.

import numpy as np 
Array1 = np.array([ [ 0.,1.,0.4284256 ], [0.,2.,0.38090856], [1., 2.,0.32901526] ]) 
Array2 = np.zeros(Array1.shape) 
Array2[np.int_(Array1[:,0]),np.int_(Array1[:,1])] = Array1[:,2] 
print(Array2) 

, результат:

[[ 0.   0.4284256 0.38090856] 
[ 0.   0.   0.32901526] 
[ 0.   0.   0.  ]] 
+0

Я не думаю, что код ur работает, если есть более 3 строк! Теперь он работает, так как у у вас 3 строки. –

+0

Индексирование работает для любого количества строк, вам просто нужно убедиться, что количество индексируемых элементов - это количество значений, которые вы приписываете. Вы можете проиндексировать обе стороны инструкции. – armatita

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