Сопоставление значений из матрицы в массив - PullRequest
0 голосов
/ 27 апреля 2019

У меня есть матрица двоичных значений размером 211 x 129, например ::1001*

matrix =

(

   0   0   1   1   0   0   0   0   0 ...   0   1   1   0   0   0   0   
   0   0   1   1   0   1   1   0   0 ...   0   0   0   0   0   0   0   
   0   0   0   0   0   0   0   0   0 ...   0   0   0   0   0   0   0   
   0   0   0   0   0   0   0   0   1 ...   0   0   0   0   0   0   0 
   ...
   ...
   ...  

)

и у меня есть массив из 211 чисел:

   array =

 [

   [158 147  35 162 143 139   8 129  43  97 163 151  24 103 161  54  38  10
    100 193 192 191 188 187 186 185 184 182 181 179 178 177 176 175 174 171
    170 169 167 166 155 154 152 149 148 146 145 142 141 136 134 132 130 
   ....

 ]

Я хотел бы сопоставить числа с соответствующей строкой в ​​массиве и создать новую матрицу. Очень важно, чтобы число из массива, например, 158 получает ровно строку 158 матрицы.

Вывод будет выглядеть так:

   new_matrix:

 (

   158 0   0   0   1   0   0   0   0   0 ...   0   0   1   0   0   0   0 //Values of row 158 from the matrix     
   147 0   0   1   0   0   1   1   0   0 ...   0   0   0   0   0   0   0 //Values of row 147 from the matrix     
   35  0   0   1   1   0   0   0   0   0 ...   0   0   0   0   0   0   0    //Values of row 35 from the matrix   
   162 0   0   0   0   0   0   0   0   1 ...   0   0   0   0   0   1   1 

   143 
   ...
   ...

 )

Любое руководство?

Ответы [ 2 ]

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

Что делать

matrix[array - 1, :]

Где array - 1 обозначает тот факт, что индексирование основано на 0 в Python .


Пример, имитирующий ваши входные данные.
>>> matrix = np.random.rand(5, 4)
>>> matrix
array([[0.15894248, 0.21096647, 0.5282654 , 0.69521   ],
       [0.86969885, 0.36367184, 0.3805844 , 0.3208523 ],
       [0.86888592, 0.40990308, 0.73697685, 0.5205354 ],
       [0.56091075, 0.92830105, 0.63612971, 0.54486469],
       [0.33106509, 0.12822892, 0.30061825, 0.03357865]])
>>> array = np.random.randint(1, 5, 3)
>>> array
array([1, 1, 4])

Наконец

>>> matrix[array - 1, :]
array([[0.15894248, 0.21096647, 0.5282654 , 0.69521   ],
       [0.15894248, 0.21096647, 0.5282654 , 0.69521   ],
       [0.56091075, 0.92830105, 0.63612971, 0.54486469]])
0 голосов
/ 27 апреля 2019

Составьте матрицу:

matrix = [[] for _ in range(211)]

Теперь вы можете заполнить ее:

for row in enumerate(array):
    matrix[row[0]] = old_matrix[row[1]]
...