0
$\begingroup$
from qiskit import *

qr   = QuantumRegister(3)
cr   = ClassicalRegister(3)
circ = QuantumCircuit(qr,cr)

circ.h(qr[0])
circ.h(qr[1])
circ.h(qr[2])

circ.measure(qr,cr)

now cr[0] maybe 0 or 1

I want to know or copy its value to another normal variable to use it in my calculation, something like if(cr[0]==0) cr_val=0 else cr_val=1

$\endgroup$

migrated from crypto.stackexchange.com Jul 11 at 16:29

This question came from our site for software developers, mathematicians and others interested in cryptography.

  • 1
    $\begingroup$ is cr_val a variable that will be used outside of qiskit, or will it be used to affect your circuit in some way? $\endgroup$ – Matthew Stypulkoski Jul 11 at 17:51
  • $\begingroup$ cr_val will be used to read the value of all cr cr[0],cr[1],cr[2] to calculate the decimal value of cr to print as decimal not as binary $\endgroup$ – remon78eg Jul 12 at 4:29
  • $\begingroup$ i want to copy the cr_val before the execute command, to store this value and reset the circuit and calculate again $\endgroup$ – remon78eg Jul 12 at 8:25
1
$\begingroup$

Answering based off of the extra clarity from your comments:

Wanting to calculate the decimal value of all cr as opposed to the binary

This can be done by using the Python built in function int(). This function will return the integer value of the input in base 10 (decimal). So you can retrieve the counts from the job by calling job.result().get_counts(<circuit_name>). This will return a dictionary with the keys being the output from the ClassicalRegisters and the values being the number of times that output was measured. If you take the keys from counts and input them into int() then it will return each output as a decimal value.

Wanting to store values from cr before the execute command

To my knowledge, there is no way to read the values from cr before executing the circuit. The values are only populated into the ClassicalRegisters after measuring the circuit, which can only be done during the execution of the circuit.

You say you want to store the values from cr and reset the circuit and calculate again. This is possible, as you can just read the outputs you get from counts, then do something to the circuit based on those results, and then run the circuit again.

$\endgroup$
0
$\begingroup$

if you want to excute the whole quantum algorithm again and again bases on the previous result then use while loop.

$\endgroup$
0
$\begingroup$

I find two answers: (code tested and working)

  • Answer (1) (read the register value before the execute command)
from qiskit import *
qiskit.IBMQ.disable_accounts()
IBMQ.enable_account('change to your api','change to your url')
#backend = qiskit.IBMQ.get_backend('ibmq_16_melbourne')
backend = qiskit.IBMQ.get_backend('ibmq_qasm_simulator')

qr  = QuantumRegister  (4)# 1110
qq  = QuantumRegister  (4)# will set to 1110 dependin on cr read
cr  = ClassicalRegister(4)
cc  = QuantumCircuit(qr,qq,cr)

cc.x(qr[1]);cc.x(qr[2]);cc.x(qr[3])# 1110

#---the important code start:----------------------------------------
for i in range(4):
    cc.measure(qr[i],cr[0])#read qr to set qq depending on the read of the classical register value using (if) condition
    cc.reset(qq[i]) # qq[i] = 0
    cc.x(qq[i]).c_if(cr,1) # if(cr == 1): qq[i] = 1 , test the whole cr decimal value, it can hold {0 to (2^n)-1}
#---the important code end--------------------------------------------

for i in range(4): cc.measure(qq[i],cr[i])#read qq

job=qiskit.execute(cc,backend,shots=1024)
result=job.result()
counts=result.get_counts(cc)
print(counts) # {'1110': 1024}

--- execute result ---

{'1110': 1024}

.

.

  • Answer (2) (read the register value after the execute command)
from qiskit import *
qiskit.IBMQ.disable_accounts()
IBMQ.enable_account('change to your api','change to your url')
#backend = qiskit.IBMQ.get_backend('ibmq_16_melbourne')
backend = qiskit.IBMQ.get_backend('ibmq_qasm_simulator')

qr  = QuantumRegister  (4)# 1110
cr  = ClassicalRegister(4)
cc  = QuantumCircuit(qr,cr)

cc.x(qr[1]);cc.x(qr[2]);cc.x(qr[3])# 1110

for i in range(4): cc.measure(qr[i],cr[i])#read

job=qiskit.execute(cc,backend,shots=1024)
result=job.result()
counts=result.get_counts(cc)
print(counts) # {'1110': 1024}

#---the important code start:----------------------------------------
lAnswer = [(k[::-1],v) for k,v in counts.items()]
lAnswer.sort(key = lambda x: x[1], reverse=True)
Y = []
for k, v in lAnswer: Y.append( [ int(c) for c in k ] )
#---the important code end--------------------------------------------

print(Y) # [[0, 1, 1, 1]]

print(Y[0][0]) # 0
print(Y[0][1]) # 1
print(Y[0][2]) # 1
print(Y[0][3]) # 1

--- execute result ---

{'1110': 1024}
[[0, 1, 1, 1]]
0
1
1
1
$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.