QuantumComputer.run_and_measure(program, trials)[source]

Run the provided state preparation program and measure all qubits.

The returned data is a dictionary keyed by qubit index because qubits for a given QuantumComputer may be non-contiguous and non-zero-indexed. To turn this dictionary into a 2d numpy array of bitstrings, consider:

bitstrings = qc.run_and_measure(...)
bitstring_array = np.vstack([bitstrings[q] for q in qc.qubits()]).T
bitstring_array.shape  # (trials, len(qc.qubits()))


If the target QuantumComputer is a noiseless QVM then only the qubits explicitly used in the program will be measured. Otherwise all qubits will be measured. In some circumstances this can exhaust the memory available to the simulator, and this may be manifested by the QVM failing to respond or timeout.


In contrast to QVMConnection.run_and_measure, this method simulates noise correctly for noisy QVMs. However, this method is slower for trials > 1. For faster noise-free simulation, consider WavefunctionSimulator.run_and_measure.

  • program (Program) – The state preparation program to run and then measure.

  • trials (int) – The number of times to run the program.

Return type

Dict[int, ndarray]


A dictionary keyed by qubit index where the corresponding value is a 1D array of measured bits.