UID shell
зарезервирован для разработки и тестирования. Запуск приложения с привилегиями shell
- обход модели безопасности Google. Таким образом, вы не сможете сделать это на защищенном коммерческом устройстве без rooting .
Возможным временным (непостоянным между перезагрузками) обходным путем было бы следующее:
adb shell
, чтобы запустить фоновый сервисный процесс, запущенный как UID оболочки Похоже, ваш вывод содержит только первые W-1
строк тестовых данных. Я не уверен, является ли это намеренным или нет. Мои решения предполагают, что вы хотите использовать все testdata
.
Когда вы строите матрицу COO, вы также строите индексы и данные аналогичным образом?
Одна вещь, которая может ускорить построение csr_matrix
, - это использовать встроенные функции numpy для генерации данных. для csr_matrix
, а не для петонов и массивов. Я ожидаю, что это значительно улучшит скорость генерации индексов. Вы можете настроить тип d на тип int в зависимости от размера вашей матрицы.
N = 4
W = 8
testdata = np.random.randn(N,W)
ptrs = N*np.arange(W*N+1,dtype='int')
indices = np.tile(np.arange(N*N,dtype='int'),W)
data = np.tile(testdata,N).flatten()
Hshape = ((N*W, N**2))
H = csr_matrix((data, indices, ptrs), shape=Hshape)
Другая возможность состоит в том, чтобы сначала создать большой массив, а затем определить каждый из N
вертикальных блоков столбцов сразу. Это означает, что вам не нужно делать тонну копий исходных данных, прежде чем поместить их в разреженную матрицу. Однако преобразование типа матрицы может быть медленным.
N = 4
W = 8
testdata = np.random.randn(N,W)
Hshape = ((N*W, N**2))
H = sp.sparse.lol_matrix(Hshape)
for j in range(N):
H[N*np.arange(W)+j,N*j:N*(j+1)] = testdata.T
H = H.tocsc()