Como você transporia uma matriz binária?

Eu tenho matrizes binárias em C ++ que eu represento com um vetor de valores de 8 bits.

Por exemplo, a seguinte matriz:

1 0 1 0 1 0 1
0 1 1 0 0 1 1
0 0 0 1 1 1 1

é representado como:

const uint8_t matrix[] = {
    0b01010101,
    0b00110011,
    0b00001111,
};

A razão pela qual estou fazendo isso dessa maneira é porque a computação do produto dessa matriz e um vetor de 8 bits se torna realmente simples e eficiente (apenas um AND bit a bit e um cálculo de paridade, por linha), o que é muito melhor do que calculando cada bit individualmente.

Agora estou procurando uma maneira eficiente de transpor essa matriz, mas não consegui descobrir como fazê-lo sem precisar calcular manualmente cada bit.

Apenas para esclarecer, para o exemplo acima, gostaria de obter o seguinte resultado da transposição:

const uint8_t transposed[] = {
    0b00000000,
    0b00000100,
    0b00000010,
    0b00000110,
    0b00000001,
    0b00000101,
    0b00000011,
    0b00000111,
};

NOTA: Eu preferiria um algoritmo que possa calcular isso com matrizes de tamanho arbitrário, mas também estou interessado em algoritmos que podem lidar apenas com determinados tamanhos.

questionAnswers(7)

yourAnswerToTheQuestion