Учитывая insert_cols
, мы можем сделать что-то вроде этого -
n = len(insert_cols)
out = np.zeros((n,n),arr.dtype)
idx = np.flatnonzero(insert_cols)
out[np.ix_(idx,idx)] = arr # or out[idx[:,None],idx] = arr
Либо можно использовать логическую версию для индексации.Следовательно -
insert_cols_bool = np.asarray(insert_cols, dtype=bool)
Затем используйте insert_cols_bool
вместо idx
.
Разреженная матрица
Чтобы повысить эффективность памяти, мыможно сохранить вывод в виде разреженной матрицы -
from scipy.sparse import coo_matrix
l = len(idx)
r,c = np.broadcast_to(idx[:,None],(l,l)).ravel(),np.broadcast_to(idx,(l,l)).ravel()
out = coo_matrix((arr.ravel(), (r,c)), shape=(n,n))