Python 我如何反转numpy转置

Python 我如何反转numpy转置,python,numpy,Python,Numpy,我有字符串Luke,我是你的父亲,通过以下步骤加密到LeImo tru,ufhk ayrae: 1:随机选择整数c。(假设c=3) 2:然后将消息写入一个n x c数组(如果字符串太短,则可能需要额外的字符“&”)。尺寸n由字符串的长度和c的值决定 3:加密消息从转置数组中获取(删除额外字符“&”后) 我该如何反转一个numpy.transpose()来反转这些步骤,以便我可以解密LeImo tru,ufhk ayrae回到Luke,我是你的父亲?以下是加密的一个可能实现: def encryp

我有字符串
Luke,我是你的父亲
,通过以下步骤加密到
LeImo tru,ufhk ayrae

1:随机选择整数c。(假设c=3)


2:然后将消息写入一个n x c数组(如果字符串太短,则可能需要额外的字符“&”)。尺寸n由字符串的长度和c的值决定

3:加密消息从转置数组中获取(删除额外字符“&”后)


我该如何反转一个
numpy.transpose()
来反转这些步骤,以便我可以解密
LeImo tru,ufhk ayrae
回到
Luke,我是你的父亲

以下是加密的一个可能实现:

def encrypt(s):
    # 'Luke, I am your father&&'
    char_values = [ ord(c) for c in s ]  # [76, 117, 107, 101, ...]
    array = np.array(char_values)  # np.array([76, 117, ...])
    block = array.reshape(8, 3)  # np.array([[76, 117, 107],
                                 #           [101, 44, 32], ...])
    transposed_block = block.transpose()  # [[76, 101, 73, ...], ...]
    linearized = transposed_block.reshape(1, 24)  # [76, 101, 73, ...]
    result = ''.join(chr(c) for c in linearized[0].tolist())
    # 'LeImo tru,  ufh&k ayrae&'
对于解密,只需将
(8,3)
替换为
(3,8)
,函数的其余部分完全相同


请记住,此实现只能处理长度正好为24个字符的字符串。

对于矩阵,转置是其自身的逆运算。“维数n由字符串的长度和c的值确定。”-这不足以明确地确定n。你能解释一下n是如何被选择的吗?你的问题是如何破解一个简单的换位密码。这是记录得相当好的。请参阅。如果以删除了“&”的字符串开头,则无法简单地反转此操作。您需要知道在何处重新插入它们,这将是一个简单的反转。是这样的,还是你有完整的转置文本?你的代码在哪里?