TypeError: tri() missing 1 required positional argument: 'N'
TypeError: tri() missing 1 required positional argument: 'N'
我无法克服错误:
> ---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-4-3e1d3e33fb00> in <module>()
7 d_unpair = np.random.beta(n,n)
8 d_pair = np.random.beta(2,2,size=n)*0.20
----> 9 d = np.tril(d_unpair)+np.tril(d_unpair, -1).T-np.diag(d_unpair)*delta+d_pair*delta
10 G=np.zeros((n,n))
11 g = A/d**3.5
<__array_function__ internals> in tril(*args, **kwargs)
/usr/local/lib/python3.7/dist-packages/numpy/lib/twodim_base.py in tril(m, k)
432 """
433 m = asanyarray(m)
--> 434 mask = tri(*m.shape[-2:], k=k, dtype=bool)
435
436 return where(mask, m, zeros(1, m.dtype))
TypeError: tri() missing 1 required positional argument: 'N'
这是出于研究目的,我完全按照 research paper 中的原样输入。 (超链接)。 [准确地说是第二个。]。
第一个代码工作正常,但我无法在第二个代码中传递此错误。
代码
import cvxpy as cvx
import numpy as np
np.random.seed(100)
n = 3 #number of transmitter = receiver
A = 0.025 #uniform receiver coefficient
delta = np.identity(n) #identity matrix
d_unpair = np.random.beta(n,n)
d_pair = np.random.beta(2,2,size=n)*0.20
d = np.tril(d_unpair)+np.tril(d_unpair, -1).T-np.diag(d_unpair)*delta+d_pair*delta
G=np.zeros((n,n))
g = A/d**3.5
S_hat=G*delta
I_hat = G-S_hat
σ = 5.0*np.ones(n)
γ = 1.0
Pmax = 1.0
p=cvx.Variable(n)
obj = cvx.Minimize(cvx.sum(p))
constraints = [p>=0, S_hat*p-γ*(I_hat*p+σ)>= 0, p <=Pmax]
prob=cvx.Problem(obj, constraints)
prob.solve()
powers = np.asarray(p.value)
print('Solution status ={0}'.format(prob.status))
print('Optimal solution ={0:.3f}'.format(prob.value))
if prob.status == 'optimal':
for j in range(n):
print('Power{0}={1:.3f}'.format(j,powers[j]))
我之前从未使用过 CVXPY 模块,所以我在堆栈溢出中查找了几个示例问题,但其中 none 符合我的问题,几乎所有问题都涉及 "TypeError: Missing 1 required positional argument: 'self'"
我该如何解决这个问题以提供正确的输出?
将 size=1
添加到对 numpy.random.beta
的调用中,其中分配了 d_unpair
:
d_unpair = np.random.beta(n, n, size=1)
错误发生是因为 numpy.random.beta
具有默认值 size=None
,这使得方法 return 成为标量值(在本例中为浮点数),这反过来又是 numpy.tril
。设置 size=1
使 numpy.random.beta
return 成为 ndarray
.
我无法克服错误:
> ---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-4-3e1d3e33fb00> in <module>()
7 d_unpair = np.random.beta(n,n)
8 d_pair = np.random.beta(2,2,size=n)*0.20
----> 9 d = np.tril(d_unpair)+np.tril(d_unpair, -1).T-np.diag(d_unpair)*delta+d_pair*delta
10 G=np.zeros((n,n))
11 g = A/d**3.5
<__array_function__ internals> in tril(*args, **kwargs)
/usr/local/lib/python3.7/dist-packages/numpy/lib/twodim_base.py in tril(m, k)
432 """
433 m = asanyarray(m)
--> 434 mask = tri(*m.shape[-2:], k=k, dtype=bool)
435
436 return where(mask, m, zeros(1, m.dtype))
TypeError: tri() missing 1 required positional argument: 'N'
这是出于研究目的,我完全按照 research paper 中的原样输入。 (超链接)。 [准确地说是第二个。]。 第一个代码工作正常,但我无法在第二个代码中传递此错误。
代码
import cvxpy as cvx
import numpy as np
np.random.seed(100)
n = 3 #number of transmitter = receiver
A = 0.025 #uniform receiver coefficient
delta = np.identity(n) #identity matrix
d_unpair = np.random.beta(n,n)
d_pair = np.random.beta(2,2,size=n)*0.20
d = np.tril(d_unpair)+np.tril(d_unpair, -1).T-np.diag(d_unpair)*delta+d_pair*delta
G=np.zeros((n,n))
g = A/d**3.5
S_hat=G*delta
I_hat = G-S_hat
σ = 5.0*np.ones(n)
γ = 1.0
Pmax = 1.0
p=cvx.Variable(n)
obj = cvx.Minimize(cvx.sum(p))
constraints = [p>=0, S_hat*p-γ*(I_hat*p+σ)>= 0, p <=Pmax]
prob=cvx.Problem(obj, constraints)
prob.solve()
powers = np.asarray(p.value)
print('Solution status ={0}'.format(prob.status))
print('Optimal solution ={0:.3f}'.format(prob.value))
if prob.status == 'optimal':
for j in range(n):
print('Power{0}={1:.3f}'.format(j,powers[j]))
我之前从未使用过 CVXPY 模块,所以我在堆栈溢出中查找了几个示例问题,但其中 none 符合我的问题,几乎所有问题都涉及 "TypeError: Missing 1 required positional argument: 'self'"
我该如何解决这个问题以提供正确的输出?
将 size=1
添加到对 numpy.random.beta
的调用中,其中分配了 d_unpair
:
d_unpair = np.random.beta(n, n, size=1)
错误发生是因为 numpy.random.beta
具有默认值 size=None
,这使得方法 return 成为标量值(在本例中为浮点数),这反过来又是 numpy.tril
。设置 size=1
使 numpy.random.beta
return 成为 ndarray
.