def sample_counts(self, shots, qargs=None): """Sample a dict of qubit measurement outcomes in the computational basis. Args: shots (int): number of samples to generate. qargs (None or list): subsystems to sample measurements for, if None sample measurement of all subsystems (Default: None). Returns: Counts: sampled counts dictionary. Additional Information: This function *samples* measurement outcomes using the measure :meth:`probabilities` for the current state and `qargs`. It does not actually implement the measurement so the current state is not modified. The seed for random number generator used for sampling can be set to a fixed value by using the stats :meth:`seed` method. """ # Sample list of outcomes samples = self.sample_memory(shots, qargs=qargs) # Combine all samples into a counts dictionary inds, counts = np.unique(samples, return_counts=True) return Counts(zip(inds, counts))
def get_counts(self, experiment=None): """Get the histogram data of an experiment. Args: experiment (str or QuantumCircuit or Schedule or int or None): the index of the experiment, as specified by ``data([experiment])``. Returns: dict[str:int] or list[dict[str:int]]: a dictionary or a list of dictionaries. A dictionary has the counts for each qubit with the keys containing a string in binary format and separated according to the registers in circuit (e.g. ``0100 1110``). The string is little-endian (cr[0] on the right hand side). Raises: QiskitError: if there are no counts for the experiment. """ if experiment is None: exp_keys = range(len(self.results)) else: exp_keys = [experiment] dict_list = [] for key in exp_keys: exp = self._get_experiment(key) try: header = exp.header.to_dict() except (AttributeError, QiskitError): # header is not available header = None if "counts" in self.data(key).keys(): if header: counts_header = { k: v for k, v in header.items() if k in {"time_taken", "creg_sizes", "memory_slots"} } else: counts_header = {} dict_list.append( Counts(self.data(key)["counts"], **counts_header)) elif "statevector" in self.data(key).keys(): vec = postprocess.format_statevector( self.data(key)["statevector"]) dict_list.append( statevector.Statevector(vec).probabilities_dict( decimals=15)) else: raise QiskitError('No counts for experiment "{}"'.format( repr(key))) # Return first item of dict_list if size is 1 if len(dict_list) == 1: return dict_list[0] else: return dict_list