# Most efficient way to calculate an expectation value of a noisy model in Qiskit

I want to classically simulate quantum circuits with noise. This noise can be a custom one (noise.NoiseModel()) or a fake quantum computer (QasmSimulator.from_backend(FakeMontreal()). I want to calculate the expectation value of an observable, for example $$\langle Z \rangle$$ of the first qubit with a finite amount of shots.

I tried different scripts and the computational time is order of magnitude larger than the equivalent codes for ideal quantum circuits (like 10x or more). If I understood correctly, it creates multiple instances of the circuit (one for each shot) and each instance is a different quantum circuit (different because, for example, new gates are added with a probability that depends on the noise model).

What's the way to do that in the most efficient way with Qiskit or other libraries?

Thank you.

• Can you provide a minimal working example of the quantity you want to achieve? For simple noise models, I think this can be more efficient without Qiskit. Also, how many qubits do you want to use in your real use case? And what is your target evaluation time? Oct 30 at 12:32
• @TristanNemoz I would like to simulate quantum circuits with 14 qubits in a time comparable with the simulation of ideal circuits (1s for my old pc). I'm interested in simple noise models (depolarizing, bitflip, phaseflip, etc.). The problem is that with 1000 shots, the best I can do is more than 30 seconds for 14 qubits. Oct 30 at 16:43
• How deep is your circuit typically, excluding noise operations? Oct 30 at 18:05
• @TristanNemoz it has 30 Ry gates per qubit (so 30*14 single qubit gates for circuits with 14 qubits) and 30 CNOT gates per neighobur pairs (so 30*13 CNOTs for circuits with 14 qubits). Oct 30 at 18:39
• And the way you apply your noise model (e.g. the depolarizing one) is by applying a noise gate after each gate that you apply, correct? Oct 30 at 18:52