numpy中set_printoptions()报错:意外关键字参数'sign'求助
解决numpy set_printoptions的sign参数报错问题
问题背景
你想要用numpy打印带额外空格的单位矩阵,比如输入3 3时期望得到:
[[ 1. 0. 0.] [ 0. 1. 0.] [ 0. 0. 1.]]
你写的代码是这样的:
import numpy numpy.set_printoptions(sign =' ') N, M = input().split(' ') print(numpy.eye(int(N), int(M)))
但运行时却碰到了类型错误:
TypeError: set_printoptions() got an unexpected keyword argument 'sign'
你提到代码在Python3在线编辑器里能正常运行,但本地用Python3.5.2+PyCharm2017.1.3就报错,想知道是IDE、Python安装还是numpy的问题。
报错原因
这完全是numpy版本的问题,和你的IDE、Python3.5.2本身没关系。sign这个参数是numpy在1.14.0版本才新增的配置项,如果你本地安装的numpy版本低于1.14.0,调用set_printoptions时传入sign=' '就会触发这个“未知参数”的错误。而在线编辑器通常会使用较新的numpy版本,所以能正常识别这个参数。
解决方案
你有两个可选的解决思路:
- 升级本地numpy版本
打开终端(或PyCharm里的终端),执行以下命令升级numpy到支持sign参数的版本:
pip install --upgrade numpy
升级完成后,你的原有代码就能正常运行了。
- 不升级numpy,用替代方式实现空格效果
如果因为某些原因不能升级numpy,可以用numpy.array2string来手动控制输出格式,比如:
import numpy N, M = input().split(' ') eye_matrix = numpy.eye(int(N), int(M)) # 为1.0的元素添加前置空格,其他元素保持原样 print(numpy.array2string(eye_matrix, formatter={'float': lambda x: f' {x}' if x == 1.0 else f'{x}'}))
或者更通用的方式,确保所有元素前都带空格:
import numpy N, M = input().split(' ') eye_matrix = numpy.eye(int(N), int(M)) # 保持矩阵的嵌套格式输出 formatted_output = '[' + ' '.join(['[' + ' '.join([f' {num}' for num in row]) + ']' for row in eye_matrix]) + ']' print(formatted_output)
内容的提问来源于stack exchange,提问作者Syed Saad
相关产品推荐
相关产品推荐

