更新IBM Qiskit包后,QRNG程序如何从Runtime Sampler获取内存信息?
解决Qiskit更新后Sampler无法获取内存信息的问题
Qiskit更新至较新版本(0.40+,尤其是0.45及以上)后,Sampler的接口发生了变更,原有的memory=True参数不再直接作为run()方法的入参,需要通过配置采样器选项来开启原始测量结果(即内存数据)的输出。以下是具体的解决方法:
核心方案:通过options参数启用内存数据输出
无论是使用本地的qiskit.primitives.Sampler还是IBM Quantum远程后端的qiskit_ibm_runtime.Sampler,都需要将memory=True和shots(指定采样次数)放入options字典中,在初始化Sampler或调用run()方法时传入。
本地Sampler示例
from qiskit.primitives import Sampler from qiskit import QuantumCircuit # 构建你的QRNG量子电路 qrng_circuit = QuantumCircuit(2, 2) qrng_circuit.h(0) qrng_circuit.cx(0, 1) qrng_circuit.measure([0, 1], [0, 1]) # 方式1:初始化时配置选项 sampler = Sampler(options={"memory": True, "shots": 1024}) result = sampler.run(qrng_circuit).result() # 方式2:调用run()时单独配置选项 # sampler = Sampler() # result = sampler.run(qrng_circuit, options={"memory": True, "shots": 1024}).result() # 获取原始内存数据(每个shot的测量结果字符串) memory_data = result.memory print(memory_data)
IBM Quantum远程后端Sampler示例
如果使用IBM的远程量子真机或模拟器,需使用qiskit_ibm_runtime中的Sampler,配置方式类似:
from qiskit_ibm_runtime import Sampler, QiskitRuntimeService from qiskit import QuantumCircuit # 连接IBM Quantum服务(需提前配置账户信息) service = QiskitRuntimeService() # 构建QRNG电路 qrng_circuit = QuantumCircuit(2, 2) qrng_circuit.h(0) qrng_circuit.cx(0, 1) qrng_circuit.measure([0, 1], [0, 1]) # 初始化远程Sampler并配置选项 sampler = Sampler(backend=service.backend("ibm_perth"), options={"memory": True, "shots": 1024}) job = sampler.run(qrng_circuit) result = job.result() # 获取内存数据 memory_data = result.memory print(memory_data)
注意事项
shots参数必须指定,因为内存数据是基于每一次采样的结果生成的,默认采样次数可能无法满足需求。- 部分IBM Quantum模拟器可能限制内存数据的输出,建议优先使用真机或支持该功能的模拟器。
- 若你是从旧版本Qiskit迁移,需将原代码中直接传入
memory=True的写法,改为放入options字典的形式。
内容的提问来源于stack exchange,提问作者Vishnu Muralidhar
相关产品推荐
相关产品推荐

