如何实现np.array兼容np.matrix的字符串快速初始化二维数组功能?
解决方案
方案1:快速过渡写法(一行代码适配)
直接复用np.matrix的字符串解析能力后转np.array,临时使用不需要额外写代码:
import numpy as np arr = np.array(np.matrix("1, 1+1j, 0; 0, 1j, 0; 0, 0, 1"))
输出结果:
array([[1.+0.j, 1.+1.j, 0.+0.j], [0.+0.j, 0.+1.j, 0.+0.j], [0.+0.j, 0.+0.j, 1.+0.j]])
如果介意np.matrix的弃用警告,可以加一行过滤警告的代码,或者使用下面的纯自定义实现方案。
方案2:自定义封装函数(无弃用风险)
可以写一个轻量工具函数,完全不依赖np.matrix实现相同的字符串初始化逻辑,你可以把这段代码放到你的Python交互式环境启动脚本里,平时当计算器用直接调用即可:
import numpy as np # 可选:用ast.literal_eval替代eval更安全,避免恶意代码执行风险,自己日常使用可忽略 import ast def arr(s: str, dtype=None): rows = [row.strip() for row in s.split(';') if row.strip()] data = [] for row in rows: elems = [ast.literal_eval(elem.strip()) for elem in row.split(',') if elem.strip()] data.append(elems) return np.array(data, dtype=dtype)
调用示例:
arr("1, 1+1j, 0; 0, 1j, 0; 0, 0, 1")
输出和上述方案一致,支持整数、浮点数、复数等各类数值写法,和原np.matrix的字符串解析体验基本对齐。
内容的提问来源于stack exchange,提问作者Meowf
相关产品推荐
相关产品推荐

