encode_to_plain_matrix
Engine.encode_to_plain_matrix(matrix, level)
- 행렬 형태의 메세지를 행렬 곱셈을 위한 행렬 평문으로 인코딩합니다.
- 인풋:
- matrix: 파이썬 리스트나 numpy 어레이만 받습니다. dtype은 int, double, complex double 모두 가능합니다.
- 행렬은 정방행렬이어야 하며, 두 차원 모두
Engine.slot_count와 같아야 합니다.
- level: optional
- 지정된 경우에는 해당 최대 곱셈 횟수에 필요한 만큼만 인코딩을 합니다. 레벨이 낮을 수록 차지하는 공간이 작지만 최대 곱셈 횟수가 줄어듭니다.
- level은 1 이상의 정수여야 합니다.
- diagonal_indices: optional
- 인코딩을 수행할 대각선 인덱스를 지정합니다. 지정하지 않으면 모든 대각선이 인코딩됩니다.
- 아웃풋:
import numpy as np
from desilofhe import Engine
engine = Engine(slot_count=4)
message = np.arange(4 * 4).reshape(4, 4)
plain_matrix = engine.encode_to_plain_matrix(message)
# 특정 레벨과 대각선 인덱스로 인코딩
plain_matrix_level_2 = engine.encode_to_plain_matrix(message, level=2)
# 대각선 인덱스는 4x4 행렬에서 각 위치가 다음과 같이 대각선에 속합니다:
# [[0, 3, 2, 1],
# [1, 0, 3, 2],
# [2, 1, 0, 3],
# [3, 2, 1, 0]]
# fmt: off
example_sparse_message = np.array([
[0, 1, 2, 0],
[0, 0, 3, 4],
[5, 0, 0, 6],
[7, 8, 0, 0],
])
# fmt: on
# 대각선 0과 1이 모두 0이므로, 대각선 2와 3만 인코딩합니다
sparse_diagonal_indices = [2, 3]
# 0으로 채워진 대각선을 건너뛰어 메모리 사용량을 줄입니다
sparse_plain_matrix = engine.encode_to_plain_matrix(
example_sparse_message, level=2, diagonal_indices=sparse_diagonal_indices
)