关于TypeError: integer argument expected, got float问题的解决办法

本文讲述了作者在使用主成分分析法处理MNSIT数据集时,遇到的关于整数类型要求的错误,并详细解释了如何通过将浮点数转换为整数(i//col)*each_width来修复`paste`函数问题。展示了修复后的拼接效果及代码调整前后对比。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  今天打算使用主成分分析法对MNSIT数据集进行降维,其中有一函数的目的是将每个手写数字图片拼接起来,组成一个大图。结果函数写好后,调用时出现了下述错误:

TypeError: integer argument expected, got float

  截图如下:

在这里插入图片描述

  于是查看了源代码:

在这里插入图片描述

  主要的问题就是paste函数中的参数要求为整数,将(i / col) * each_width改为(i // col) * each_width即可解决问题。

  拼接后的结果如下图所示:
在这里插入图片描述

这个错误是因为你在代码中使用了一个浮点数,但是 Hill 密码算法只支持整数。你需要将浮点数转换为整数,可以使用 int() 函数。以下是一个示例: ``` import numpy as np # 加密函数 def encrypt(plain_text, key): # 将明文转换为数字序列 plain_text = [ord(c) - ord('a') for c in plain_text] n = len(key) # 将明文分组 plain_text = [plain_text[i:i+n] for i in range(0, len(plain_text), n)] # 将密钥转换为矩阵 key_matrix = np.array([ord(c) - ord('a') for c in key]).reshape((n, n)) # 加密每个分组 cipher_text = [] for group in plain_text: group = np.array(group + [0] * (n - len(group))) # 将数字序列转换为列向量 group = group.reshape((-1, 1)) # 计算密文 cipher_group = key_matrix.dot(group) % 26 cipher_group = cipher_group.flatten().tolist() # 将数字序列转换为字符序列 cipher_group = ''.join([chr(c + ord('a')) for c in cipher_group]) cipher_text.append(cipher_group) # 将密文连接成一个字符串 return ''.join(cipher_text) # 解密函数 def decrypt(cipher_text, key): # 将密文转换为数字序列 cipher_text = [ord(c) - ord('a') for c in cipher_text] n = len(key) # 将密文分组 cipher_text = [cipher_text[i:i+n] for i in range(0, len(cipher_text), n)] # 将密钥转换为矩阵 key_matrix = np.array([ord(c) - ord('a') for c in key]).reshape((n, n)) # 计算矩阵的逆 det = int(np.round(np.linalg.det(key_matrix))) inv_det = pow(det, -1, 26) key_matrix = (inv_det * np.round(det * np.linalg.inv(key_matrix)).astype(int)) % 26 # 解密每个分组 plain_text = [] for group in cipher_text: group = np.array(group + [0] * (n - len(group))) # 将数字序列转换为列向量 group = group.reshape((-1, 1)) # 计算明文 plain_group = key_matrix.dot(group) % 26 plain_group = plain_group.flatten().tolist() # 将数字序列转换为字符序列 plain_group = ''.join([chr(c + ord('a')) for c in plain_group]) plain_text.append(plain_group) # 将明文连接成一个字符串 return ''.join(plain_text) # 主函数 def main(): # 获取明文或密文 text = input("请输入明文或密文:") # 获取密钥 key = input("请输入密钥:") # 加密或解密 if text.isalpha(): cipher_text = encrypt(text, key) print("加密结果:", cipher_text) else: plain_text = decrypt(text, key) print("解密结果:", plain_text) if __name__ == '__main__': main() ``` 在这个示例中,我使用 int() 函数将浮点数转换为整数: ``` det = int(np.round(np.linalg.det(key_matrix))) ``` 这个语句计算密钥矩阵的行列式,并将结果四舍五入并转换为整数。如果不进行转换,结果将是一个浮点数,无法用于 Hill 密码算法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值