cirq.targeted_left_multiply¶
-
cirq.targeted_left_multiply(left_matrix: numpy.ndarray, right_target: numpy.ndarray, target_axes: Sequence[int], out: Optional[numpy.ndarray] = None) → numpy.ndarray[source]¶ Left-multiplies the given axes of the target tensor by the given matrix.
Note that the matrix must have a compatible tensor structure.
For example, if you have an 6-qubit state vectorinput_statewith shape(2, 2, 2, 2, 2, 2), and a 2-qubit unitary operationopwith shape(2, 2, 2, 2), and you want to applyopto the 5’th and 3’rd qubitswithininput_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 avector. If a unitary circuit’s matrix isold_effect, and you appenda CNOT(q1, q4) operation onto the circuit, where the control q1 is the qubitat offset 1 and the target q4 is the qubit at offset 4, then the appendedcircuit’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])
Parameters: - left_matrix – What to left-multiply the target tensor by.
- right_target – A tensor to carefully broadcast a left-multiply over.
- target_axes – Which axes of the target are being operated on.
- out – The buffer to store the results in. If not specified or None, a new buffer is used. Must have the same shape as right_target.
Returns: The output tensor.