У меня, правда, нет опыта работы с разреженными матрицами в Python.Я читал различные ответы и документацию по разреженным матрицам SciPy, и они звучат очень убедительно;но я не уверен, что они помогут мне решить мою проблему.Вот моя проблема:
v=proxy_chunk.proxy_pos_bp.values.astype(np.uint32)
s1=gene_chunk.start.values.astype(np.uint32)
s2=gene_chunk.end.values.astype(np.uint32)
mult_matr = ((v>=s1[:,None])&(v<=s2[:,None])).T
proxy_chunk['extract'] = [list(gene_chunk.loc[x, 'extract']) for x in mult_matr]
По сути, мой dataframe
'proxy_chunk' имеет переменную 'proxy_pos_bp', это просто числа, скажем [20, 12345, 900, 99, 97, 600321, 15],Мой dataframe
'gene_chunk' имеет две переменные, 'start' и 'end, которые определяют начало и конец интервалов в терминах, превышающих ноль.Допустим, начало - [40, 12000, 600000], а конец - [98, 15000, 610000].Я просто хочу придумать матрицу, которая построчно описывает, находится ли «proxy_pos_bp» в границах каждого интервала.
Вышеописанное прекрасно работает.В этом случае mult_matr выглядит так:
array([[False, False, False],
[False, True, False],
[False, False, False],
[False, False, False],
[ True, False, False],
[False, False, True],
[False, False, False]])
Проблема в том, что это обжор памяти.Когда я запускаю это на самом большом proxy_chunk, который у меня есть, который составляет около 110 000 строк, по сравнению с его соответствующим gene_chunk, я получаю 500 ГБ ОЗУ и вынужден завершать процесс перед тем, как завершить работу кластера.Однако я заметил, что mult_matr по существу соответствовал бы определению разреженной матрицы;большинство значений ложные, а некоторые истинные.Будет ли вывод этой информации непосредственно в разреженную матрицу решить мою проблему?Можно ли выводить напрямую в разреженную матрицу?