Я пытаюсь достичь следующего:
Дан массив, который выглядит так:
[1 0 0 0 0 0 0 0 0]
[1 1 0 0 0 0 0 0 0]
[1 1 1 0 0 0 0 0 0]
[1 1 1 1 0 0 0 0 0]
[1 1 1 1 1 0 0 0 0]
[1 1 1 1 1 1 0 0 0]
[1 1 1 1 1 1 1 0 0]
[1 1 1 1 1 1 1 1 0]
[1 1 1 1 1 1 1 1 1]
Имейте в виду, что это небольшой массив формы [9 на 9] и может быть инициализирован одним go. Массив, который я хочу построить, имеет форму [90000 на 90000], следовательно, его нельзя инициализировать в одном go.
После преобразования этого массива [9 на 9] в партии он выглядит так:
[[1 0 0 0 0 0 0 0 0]
[1 1 0 0 0 0 0 0 0]
[1 1 1 0 0 0 0 0 0]],
[[1 1 1 1 0 0 0 0 0]
[1 1 1 1 1 0 0 0 0]
[1 1 1 1 1 1 0 0 0]],
[[1 1 1 1 1 1 1 0 0]
[1 1 1 1 1 1 1 1 0]
[1 1 1 1 1 1 1 1 1]]
Я могу использовать эти отдельные фрагменты для выполнения операций.
Как я могу инициализировать массив [90000 на 90000] партиями, сохраняя размещение единиц в массиве?
Я пробовал tf.linalg.LinearOperatorLowerTrin angular () оператор. Вот как выглядит результат:
>>> arr = tf.linalg.LinearOperatorLowerTriangular(tf.ones((3,3,9)))
>>> arr.to_dense()
<tf.Tensor: id=28, shape=(3, 3, 9), dtype=float32, numpy=
array([[[1., 0., 0., 0., 0., 0., 0., 0., 0.],
[1., 1., 0., 0., 0., 0., 0., 0., 0.],
[1., 1., 1., 0., 0., 0., 0., 0., 0.]],
[[1., 0., 0., 0., 0., 0., 0., 0., 0.],
[1., 1., 0., 0., 0., 0., 0., 0., 0.],
[1., 1., 1., 0., 0., 0., 0., 0., 0.]],
[[1., 0., 0., 0., 0., 0., 0., 0., 0.],
[1., 1., 0., 0., 0., 0., 0., 0., 0.],
[1., 1., 1., 0., 0., 0., 0., 0., 0.]]], dtype=float32)>
На выходе вы можете видеть, что единицы в каждом пакете начинаются с первого индекса.
Кроме того, когда я инициализирую "arr" :
>>> arr = tf.linalg.LinearOperatorLowerTriangular(tf.ones((3,3,9)))
Я использовал tf.ones()
, в моем случае я даже не могу использовать это для инициализации массива 90000 на 90000.
Пожалуйста, предложите какой-либо эффективный способ создания / инициализации такого матрица?
Редактировать:
Что именно я ищу? a logi c относительно того, как я могу сделать блоки / субматрицы большой матрицы 90000 на 90000. Например, я могу создать 10 субматриц размером 9000 на 90000. Однако как я могу инициализировать эти 10 субматриц, чтобы выглядят как единственная нижняя три angular матрица. Я буду использовать эти подматрицы для выполнения векторно-матричного умножения. Как только я смогу найти способ присвоить значения этим подматрицам (таким образом, чтобы при сложении они выглядели как одна нижняя три angular матрица единиц), то после выполнения векторно-матричного умножения я могу добавить все 10 результирующих матриц. в один.