微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

类型错误:tri() 缺少 1 个必需的位置参数:'N'

如何解决类型错误:tri() 缺少 1 个必需的位置参数:'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,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 模块,因此我在堆栈溢出中查找了一些示例问题,但没有一个与我的问题相符,几乎所有问题都涉及 "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,它返回一个标量值(在这种情况下是一个浮点数),这反过来又是 numpy.tril 的一个错误参数。设置 size=1 使 numpy.random.beta 返回 ndarray

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。