Numpy Матрица из индексов - PullRequest
0 голосов
/ 13 февраля 2020

У меня есть матрица, состоящая из трех столбцов и десяти r aws, в которой в первом и втором столбцах сохраняются индексы другой матрицы (фактически изображения). Значения каждой ячейки изображения сохраняются в третьем столбце. Кстати, не все ячейки имеют значение!

In[11] u = np.array([2, 0, 1, 5, 6, 3, 4, 7, 9, 8])   # Column indicies of a grid (matrix)
In[12] v = np.array([0, 0, 2, 2, 1, 1, 4, 4, 3, 3])   # Raw indicies of a grid (matrix) 
In[13] r = np.random.randn(10)   # grid cell value
In[25]: uvr = np.vstack((u, v, r)).T
In[26]: uvr
Out[25]:
array([[ 2.  ,  0.  ,  0.7 ],
       [ 0.  ,  0.  ,  0.09],
       [ 1.  ,  2.  , -0.17],
       [ 5.  ,  2.  ,  1.18],
       [ 6.  ,  1.  , -1.3 ],
       [ 3.  ,  1.  , -0.28],
       [ 4.  ,  4.  , -1.88],
       [ 7.  ,  4.  , -0.19],
       [ 9.  ,  3.  , -0.86],
       [ 8.  ,  3.  ,  1.94]])

Теперь я хочу создать изображение и назначить соответствующее значение каждой ячейке в зависимости от индексов ячейки. Прямо сейчас я делаю это через for-l oop:

img = np.zeros((10, 10))
for i, _ in enumerate(uvr):
    uu = u[i]
    vv = v[i]
    img[uu, vv] = r[i]

К сожалению, это занимает слишком много времени, так как приведенный выше сценарий просто примерный, и мой реальный образ намного больше. Есть ли способ преобразовать упомянутую матрицу из трех столбцов в изображение без for-l oop, с помощью , просто используя NumPy функции ?

Я также осведомлен о list- понимание, но так как я делаю некоторые промежуточные вычисления, списочное понимание на самом деле не является решением.

спасибо

1 Ответ

0 голосов
/ 13 февраля 2020

Вы можете просто использовать u и v для индексации, затем r для присвоения значений этим индексам

>>> img[u, v] = r
>>> img
array([[ 0.09,  0.  ,  0.  ,  0.  ,  0.  ,  0.  ,  0.  ,  0.  ,  0.  ,  0.  ],
       [ 0.  ,  0.  , -0.17,  0.  ,  0.  ,  0.  ,  0.  ,  0.  ,  0.  ,  0.  ],
       [ 0.7 ,  0.  ,  0.  ,  0.  ,  0.  ,  0.  ,  0.  ,  0.  ,  0.  ,  0.  ],
       [ 0.  , -0.28,  0.  ,  0.  ,  0.  ,  0.  ,  0.  ,  0.  ,  0.  ,  0.  ],
       [ 0.  ,  0.  ,  0.  ,  0.  , -1.88,  0.  ,  0.  ,  0.  ,  0.  ,  0.  ],
       [ 0.  ,  0.  ,  1.18,  0.  ,  0.  ,  0.  ,  0.  ,  0.  ,  0.  ,  0.  ],
       [ 0.  , -1.3 ,  0.  ,  0.  ,  0.  ,  0.  ,  0.  ,  0.  ,  0.  ,  0.  ],
       [ 0.  ,  0.  ,  0.  ,  0.  , -0.19,  0.  ,  0.  ,  0.  ,  0.  ,  0.  ],
       [ 0.  ,  0.  ,  0.  ,  1.94,  0.  ,  0.  ,  0.  ,  0.  ,  0.  ,  0.  ],
       [ 0.  ,  0.  ,  0.  , -0.86,  0.  ,  0.  ,  0.  ,  0.  ,  0.  ,  0.  ]])
...