View source on GitHub |
Left-multiplies the given axes of the target tensor by the given matrix.
cirq.targeted_left_multiply(
left_matrix: np.ndarray,
right_target: np.ndarray,
target_axes: Sequence[int],
out: Optional[np.ndarray] = None
) -> np.ndarray
Note that the matrix must have a compatible tensor structure.
For example, if you have an 6-qubit state vector input_state
with shape
(2, 2, 2, 2, 2, 2), and a 2-qubit unitary operation op
with shape
(2, 2, 2, 2), and you want to apply op
to the 5'th and 3'rd qubits
within input_state
, then the output state vector is computed as follows:
output_state = cirq.targeted_left_multiply(op, input_state, [5, 3])
This method also works when the right hand side is a matrix instead of a
vector. If a unitary circuit's matrix is old_effect
, and you append
a CNOT(q1, q4) operation onto the circuit, where the control q1 is the qubit
at offset 1 and the target q4 is the qubit at offset 4, then the appended
circuit's unitary matrix is computed as follows:
new_effect = cirq.targeted_left_multiply(
left_matrix=cirq.unitary(cirq.CNOT).reshape((2, 2, 2, 2)),
right_target=old_effect,
target_axes=[1, 4])
Returns | |
---|---|
The output tensor. |
Raises | |
---|---|
ValueError
|
If out is either right_target or left_matrix .
|