Если вам нужен плотный массив, мы теряем эффективность использования памяти и, следовательно, производительность -

эффективный способ создания матрицы вхождений из двух массивов, которые содержат индексы, один представляетиндексы строк в этой матрице, другие, столбцы.

например. У меня есть:

#matrix will be size 4x3 in this example
#array of rows idxs, with values from 0 to 3
[0, 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3]
#array of columns idxs, with values from 0 to 2
[0, 1, 1, 1, 2, 2, 0, 1, 2, 0, 2, 2, 2, 2]

И нужно создать матрицу вхождений вроде:

[[1  0  0]
 [0  2  0]
 [0  1  2]
 [2  1  5]]

Я могу создать массив из горячих векторов в простой форме, но не могу заставить его работать, когда существует более одного вхождения:

n_rows    = 4
n_columns = 3
#data
rows    = np.array([0, 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3])
columns = np.array([0, 1, 1, 1, 2, 2, 0, 1, 2, 0, 2, 2, 2, 2])
#empty matrix
new_matrix = np.zeros([n_rows, n_columns])
#adding 1 for each [row, column] occurrence:
new_matrix[rows, columns] += 1
print(new_matrix)

Который возвращает:

[[ 1.  0.  0.]
 [ 0.  1.  0.]
 [ 0.  1.  1.]
 [ 1.  1.  1.]]

Кажется, что индексирование и добавление такого значения не работает, когда существует более одного вхождения / индекса, кроме печати, кажется, работает нормально:

print(new_matrix[rows, :])

:

[[ 1.  0.  0.]
 [ 0.  1.  0.]
 [ 0.  1.  0.]
 [ 0.  1.  1.]
 [ 0.  1.  1.]
 [ 0.  1.  1.]
 [ 1.  1.  1.]
 [ 1.  1.  1.]
 [ 1.  1.  1.]
 [ 1.  1.  1.]
 [ 1.  1.  1.]
 [ 1.  1.  1.]
 [ 1.  1.  1.]
 [ 1.  1.  1.]]

Так может я что-то там упускаю? Или это не может быть сделано, и мне нужно искать другой способ сделать это?

Ответы на вопрос(2)

Ваш ответ на вопрос