[ PROMPT_NODE_27210 ]
primitives
[ SKILL_DOCUMENTATION ]
# Qiskit 原语 (Primitives)
原语是执行量子电路的基本构建块。Qiskit 提供两个主要原语:**Sampler**(用于测量位串)和 **Estimator**(用于计算期望值)。
## 原语类型
### Sampler (采样器)
计算量子电路中位串的概率或准概率。当您需要以下内容时使用:
- 测量结果
- 输出概率分布
- 从量子态进行采样
### Estimator (估计器)
计算量子电路可观测量的期望值。当您需要以下内容时使用:
- 能量计算
- 可观测量测量
- 变分算法优化
## V2 接口(当前标准)
Qiskit 使用 V2 原语 (BaseSamplerV2, BaseEstimatorV2) 作为当前标准。V1 原语已过时。
## Sampler 原语
### StatevectorSampler (本地模拟)
python
from qiskit import QuantumCircuit
from qiskit.primitives import StatevectorSampler
# 创建电路
qc = QuantumCircuit(2)
qc.h(0)
qc.cx(0, 1)
qc.measure_all()
# 使用 Sampler 运行
sampler = StatevectorSampler()
result = sampler.run([qc], shots=1024).result()
# 访问结果
counts = result[0].data.meas.get_counts()
print(counts) # 例如:{'00': 523, '11': 501}
### 多个电路
python
qc1 = QuantumCircuit(2)
qc1.h(0)
qc1.measure_all()
qc2 = QuantumCircuit(2)
qc2.x(0)
qc2.measure_all()
# 运行多个电路
sampler = StatevectorSampler()
job = sampler.run([qc1, qc2], shots=1000)
results = job.result()
# 访问单个结果
counts1 = results[0].data.meas.get_counts()
counts2 = results[1].data.meas.get_counts()
### 使用参数
python
from qiskit.circuit import Parameter
theta = Parameter('θ')
qc = QuantumCircuit(1)
qc.ry(theta, 0)
qc.measure_all()
# 使用参数值运行
sampler = StatevectorSampler()
param_values = [[0], [np.pi/4], [np.pi/2]]
result = sampler.run([(qc, param_values)], shots=1024).result()
## Estimator 原语
### StatevectorEstimator (本地模拟)
python
from qiskit import QuantumCircuit
from qiskit.primitives import StatevectorEstimator
from qiskit.quantum_info import SparsePauliOp
# 创建不带测量的电路
qc = QuantumCircuit(2)
qc.h(0)
qc.cx(0, 1)
# 定义可观测量
observable = SparsePauliOp(["ZZ", "XX"])
# 运行 Estimator
estimator = StatevectorEstimator()
result = estimator.run([(qc, observable)]).result()
# 访问期望值
exp_value = result[0].data.evs
print(f"期望值: {exp_value}")
##