本文整理汇总了Python中qutip.qobj.Qobj.shape方法的典型用法代码示例。如果您正苦于以下问题:Python Qobj.shape方法的具体用法?Python Qobj.shape怎么用?Python Qobj.shape使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类qutip.qobj.Qobj
的用法示例。
在下文中一共展示了Qobj.shape方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: _steadystate_power
# 需要导入模块: from qutip.qobj import Qobj [as 别名]
# 或者: from qutip.qobj.Qobj import shape [as 别名]
def _steadystate_power(L, maxiter=10, tol=1e-6, itertol=1e-5,
verbose=False):
"""
Inverse power method for steady state solving.
"""
if verbose:
print('Starting iterative power method Solver...')
use_solver(assumeSortedIndices=True)
rhoss = Qobj()
sflag = issuper(L)
if sflag:
rhoss.dims = L.dims[0]
rhoss.shape = [prod(rhoss.dims[0]), prod(rhoss.dims[1])]
else:
rhoss.dims = [L.dims[0], 1]
rhoss.shape = [prod(rhoss.dims[0]), 1]
n = prod(rhoss.shape)
L = L.data.tocsc() - (tol ** 2) * sp.eye(n, n, format='csc')
L.sort_indices()
v = mat2vec(rand_dm(rhoss.shape[0], 0.5 / rhoss.shape[0] + 0.5).full())
if verbose:
start_time = time.time()
it = 0
while (la.norm(L * v, np.inf) > tol) and (it < maxiter):
v = spsolve(L, v)
v = v / la.norm(v, np.inf)
it += 1
if it >= maxiter:
raise Exception('Failed to find steady state after ' +
str(maxiter) + ' iterations')
# normalise according to type of problem
if sflag:
trow = sp.eye(rhoss.shape[0], rhoss.shape[0], format='coo')
trow = sp_reshape(trow, (1, n))
data = v / sum(trow.dot(v))
else:
data = data / la.norm(v)
data = sp.csr_matrix(vec2mat(data))
rhoss.data = 0.5 * (data + data.conj().T)
rhoss.isherm = True
if verbose:
print('Power solver time: ', time.time() - start_time)
if qset.auto_tidyup:
return rhoss.tidyup()
else:
return rhoss
示例2: tensor
# 需要导入模块: from qutip.qobj import Qobj [as 别名]
# 或者: from qutip.qobj.Qobj import shape [as 别名]
def tensor(*args):
"""Calculates the tensor product of input operators.
Parameters
----------
args : array_like
``list`` or ``array`` of quantum objects for tensor product.
Returns
--------
obj : qobj
A composite quantum object.
Examples
--------
>>> tensor([sigmax(), sigmax()])
Quantum object: dims = [[2, 2], [2, 2]], shape = [4, 4], type = oper, isHerm = True
Qobj data =
[[ 0.+0.j 0.+0.j 0.+0.j 1.+0.j]
[ 0.+0.j 0.+0.j 1.+0.j 0.+0.j]
[ 0.+0.j 1.+0.j 0.+0.j 0.+0.j]
[ 1.+0.j 0.+0.j 0.+0.j 0.+0.j]]
"""
if not args:
raise TypeError("Requires at least one input argument")
num_args=len(args)
step=0
for n in range(num_args):
if isinstance(args[n],Qobj):
qos=args[n]
if step==0:
dat=qos.data
dim=qos.dims
shp=qos.shape
step=1
else:
dat=sp.kron(dat,qos.data, format='csr') #sparse Kronecker product
dim=[dim[0]+qos.dims[0],dim[1]+qos.dims[1]] #append dimensions of Qobjs
shp=[dat.shape[0],dat.shape[1]] #new shape of matrix
elif isinstance(args[n],(list,ndarray)):#checks if input is list/array of Qobjs
qos=args[n]
items=len(qos) #number of inputs
if not all([isinstance(k,Qobj) for k in qos]): #raise error if one of the inputs is not a quantum object
raise TypeError("One of inputs is not a quantum object")
if items==1:# if only one Qobj, do nothing
if step==0:
dat=qos[0].data
dim=qos[0].dims
shp=qos[0].shape
step=1
else:
dat=sp.kron(dat,qos[0].data, format='csr') #sparse Kronecker product
dim=[dim[0]+qos[0].dims[0],dim[1]+qos[0].dims[1]] #append dimensions of Qobjs
shp=[dat.shape[0],dat.shape[1]] #new shape of matrix
elif items!=1:
if step==0:
dat=qos[0].data
dim=qos[0].dims
shp=qos[0].shape
step=1
for k in range(items-1): #cycle over all items
dat=sp.kron(dat,qos[k+1].data, format='csr') #sparse Kronecker product
dim=[dim[0]+qos[k+1].dims[0],dim[1]+qos[k+1].dims[1]] #append dimensions of Qobjs
shp=[dat.shape[0],dat.shape[1]] #new shape of matrix
out=Qobj()
out.data=dat
out.dims=dim
out.shape=shp
if qutip.settings.auto_tidyup:
return Qobj(out).tidyup() #returns tidy Qobj
else:
return Qobj(out)