如何在序言中转置多维(3D)矩阵
how to transpose multidimensional (3D) matrix in prolog
我想在 Prolog 中转置矩阵。我是 Prolog 的新手,到目前为止我知道如何为二维矩阵做这件事
transpose([], []).
transpose([H|T], Ts) :- transpose(H, [H|T], Ts).
transpose([], _, []).
transpose([_|T1], L, [H1|T2]) :- lfr(L, H1, M), transpose(T1, M, T2).
lfr([], [], []).
lfr([[H3|T4]|R], [H3|T5], [T4|O]) :- lfr(R, T5, O).
但不是为了更多。我在 google 上找不到任何内容,因此将不胜感激。
示例:
输入 [ [ [1,2,3],[4,5,6] ], [ [7,8,9],[10,11,12] ] ].
输出 [ [ [1,4],[7,10] ], [ [2,5],[8,11] ], [ [3,6],[9,12] ] ]。
谢谢。
如果你有一个 2D 矩阵的转置谓词,那么 3D 矩阵的转置可以通过以下步骤完成:
- 转置 3D 矩阵的每个 2D 矩阵元素(为此您可以使用
maplist/2
)
- 将生成的 3D 矩阵转置为列表的 2D 矩阵。
序言中:
matrix_3d_transposed(Matrix, TransMatrix) :-
maplist(matrix_2d_transposed, Matrix, TMatrices),
matrix_2d_transposed(TMatrices, TransMatrix).
我想在 Prolog 中转置矩阵。我是 Prolog 的新手,到目前为止我知道如何为二维矩阵做这件事
transpose([], []).
transpose([H|T], Ts) :- transpose(H, [H|T], Ts).
transpose([], _, []).
transpose([_|T1], L, [H1|T2]) :- lfr(L, H1, M), transpose(T1, M, T2).
lfr([], [], []).
lfr([[H3|T4]|R], [H3|T5], [T4|O]) :- lfr(R, T5, O).
但不是为了更多。我在 google 上找不到任何内容,因此将不胜感激。 示例:
输入 [ [ [1,2,3],[4,5,6] ], [ [7,8,9],[10,11,12] ] ].
输出 [ [ [1,4],[7,10] ], [ [2,5],[8,11] ], [ [3,6],[9,12] ] ]。
谢谢。
如果你有一个 2D 矩阵的转置谓词,那么 3D 矩阵的转置可以通过以下步骤完成:
- 转置 3D 矩阵的每个 2D 矩阵元素(为此您可以使用
maplist/2
) - 将生成的 3D 矩阵转置为列表的 2D 矩阵。
序言中:
matrix_3d_transposed(Matrix, TransMatrix) :-
maplist(matrix_2d_transposed, Matrix, TMatrices),
matrix_2d_transposed(TMatrices, TransMatrix).