def reconstruct_skel_matrix(A, k, idx):
    '\n    Reconstruct skeleton matrix from ID.\n\n    The skeleton matrix can be reconstructed from the original matrix `A` and its\n    ID rank and indices `k` and `idx`, respectively, as::\n\n        B = A[:,idx[:k]]\n\n    The original matrix can then be reconstructed via::\n\n        numpy.hstack([B, numpy.dot(B, proj)])[:,numpy.argsort(idx)]\n\n    See also :func:`reconstruct_matrix_from_id` and\n    :func:`reconstruct_interp_matrix`.\n\n    ..  This function automatically detects the matrix data type and calls the\n        appropriate backend. For details, see :func:`_backend.idd_copycols` and\n        :func:`_backend.idz_copycols`.\n\n    Parameters\n    ----------\n    A : :class:`numpy.ndarray`\n        Original matrix.\n    k : int\n        Rank of ID.\n    idx : :class:`numpy.ndarray`\n        Column index array.\n\n    Returns\n    -------\n    :class:`numpy.ndarray`\n        Skeleton matrix.\n    '
    if _is_real(A):
        return _backend.idd_copycols(A, k, (idx + 1))
    else:
        return _backend.idz_copycols(A, k, (idx + 1))
Reconstruct skeleton matrix from ID.

The skeleton matrix can be reconstructed from the original matrix `A` and its
ID rank and indices `k` and `idx`, respectively, as::

    B = A[:,idx[:k]]

The original matrix can then be reconstructed via::

    numpy.hstack([B, numpy.dot(B, proj)])[:,numpy.argsort(idx)]

See also :func:`reconstruct_matrix_from_id` and
:func:`reconstruct_interp_matrix`.

..  This function automatically detects the matrix data type and calls the
    appropriate backend. For details, see :func:`_backend.idd_copycols` and
    :func:`_backend.idz_copycols`.

Parameters
----------
A : :class:`numpy.ndarray`
    Original matrix.
k : int
    Rank of ID.
idx : :class:`numpy.ndarray`
    Column index array.

Returns
-------
:class:`numpy.ndarray`
    Skeleton matrix.
def reconstruct_skel_matrix(A, k, idx):
    '\n    Reconstruct skeleton matrix from ID.\n\n    The skeleton matrix can be reconstructed from the original matrix `A` and its\n    ID rank and indices `k` and `idx`, respectively, as::\n\n        B = A[:,idx[:k]]\n\n    The original matrix can then be reconstructed via::\n\n        numpy.hstack([B, numpy.dot(B, proj)])[:,numpy.argsort(idx)]\n\n    See also :func:`reconstruct_matrix_from_id` and\n    :func:`reconstruct_interp_matrix`.\n\n    ..  This function automatically detects the matrix data type and calls the\n        appropriate backend. For details, see :func:`_backend.idd_copycols` and\n        :func:`_backend.idz_copycols`.\n\n    Parameters\n    ----------\n    A : :class:`numpy.ndarray`\n        Original matrix.\n    k : int\n        Rank of ID.\n    idx : :class:`numpy.ndarray`\n        Column index array.\n\n    Returns\n    -------\n    :class:`numpy.ndarray`\n        Skeleton matrix.\n    '
    if _is_real(A):
        return _backend.idd_copycols(A, k, (idx + 1))
    else:
        return _backend.idz_copycols(A, k, (idx + 1))