Код: Выделить всё
def myhorsplit(
matrix: sparse.sparray, n_compute_units: int = 4,
) -> list[sparse.sparray]:
nnz = matrix.getnnz(axis=1).cumsum()
total = nnz[-1]
ideal_breaks = np.arange(0, total, total/n_compute_units)
break_idx = [*nnz.searchsorted(ideal_breaks), None]
return [
matrix[i: j, :]
for i, j in zip(break_idx[:-1], break_idx[1:])
]
def main() -> None:
rand = np.random.default_rng(seed=0)
# Create an 8x8 adjacency matrix with the modified element
adjacency_matrix = [
(1, 1, 1, 1, 0, 0, 0, 0),
(1, 0, 1, 0, 0, 0, 0, 0),
(1, 1, 0, 1, 0, 0, 0, 0),
(1, 0, 1, 0, 0, 0, 0, 0),
(0, 0, 1, 0, 0, 1, 0, 1),
(0, 0, 0, 0, 1, 0, 0, 0),
(0, 0, 0, 0, 1, 1, 0, 1),
(0, 0, 1, 0, 1, 0, 1, 0),
]
# csr_matrix = sparse.csr_array(adjacency_matrix)
csr_matrix = sparse.csr_array(
rand.integers(low=0, high=2, size=(10_000, 50), dtype=np.uint8)
)
partitions = myhorsplit(csr_matrix)
for i, partition in enumerate(partitions):
print(f"Partition {i}: {partition.nnz} ones, shape {partition.shape}")
# print(partition.toarray())
Код: Выделить всё
Partition 0: 4 ones, shape (1, 8)
[[1 1 1 1 0 0 0 0]]
Partition 1: 5 ones, shape (2, 8)
[[1 0 1 0 0 0 0 0]
[1 1 0 1 0 0 0 0]]
Partition 2: 6 ones, shape (3, 8)
[[1 0 1 0 0 0 0 0]
[0 0 1 0 0 1 0 1]
[0 0 0 0 1 0 0 0]]
Partition 3: 6 ones, shape (2, 8)
[[0 0 0 0 1 1 0 1]
[0 0 1 0 1 0 1 0]]
Мне было интересно, есть ли способ добиться такого разделения из двоичного файла (сгенерированного с помощью Graph500), прочитав файл только ?
Я подумал, что один из вариантов - найти оптимальную функцию, которая ранжирует все ребра в зависимости от их исходного узла, а затем разделяет их, что все равно сохранит правильность регионов? Как я могу подойти к этой проблеме?
Подробнее здесь: https://stackoverflow.com/questions/790 ... inary-file