¿Cómo transponer una matriz binaria?

Tengo matrices binarias en C ++ que repito con un vector de valores de 8 bits.

Por ejemplo, la siguiente matriz:

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

se representa como:

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

La razón por la que lo hago de esta manera es porque calcular el producto de dicha matriz y un vector de 8 bits se vuelve realmente simple y eficiente (solo un bit Y y un cálculo de paridad, por fila), que es mucho mejor que calculando cada bit individualmente.

Ahora estoy buscando una manera eficiente de transponer dicha matriz, pero no he podido encontrar la manera de hacerlo sin tener que calcular manualmente cada bit.

Solo para aclarar, para el ejemplo anterior, me gustaría obtener el siguiente resultado de la transposición:

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

NOTA: Preferiría un algoritmo que pueda calcular esto con matrices de tamaño arbitrario, pero también estoy interesado en algoritmos que solo puedan manejar ciertos tamaños.

Respuestas a la pregunta(7)

Su respuesta a la pregunta