matlab TypeError:只有大小为1的数组才能转换为Python标量,为什么我会收到这个错误?

ovfsdjhp  于 2022-11-15  发布在  Matlab
关注(0)|答案(1)|浏览(145)

这是我的MatLab代码,运行良好:

r=log2(1+gamma)-sqrt(V(gamma)/n)*qfuncinv(target)/log(2);
V=@(x)1-(1+x).^-2;

我将按如下方式将其转换为python:

r=math.log2(1+gamma)-math.sqrt(V(gamma)/n)*(abs(norm.ppf(target))/math.log(2))

哪里,

gamma = 1 x 4957 double, n=256, target= 10**-5

和v

def V(x):
    return (x)-(1+x)**-2

如何解决这个问题?谢谢

72qzrwbm

72qzrwbm1#

如果您使用的是NumPy数组,请使用NumPy。

import numpy as np
r=np.log2(1+gamma)-np.sqrt(V(gamma)/n)*(abs(norm.ppf(target))/np.log(2))

math通常只接受1个数字作为输入,即python标量。因此,当V(gamma)/n恰好是一个大小大于1的数组,并且math.sqrt需要一个python标量时,您会得到:

TypeError: only size-1 arrays can be converted to Python scalars.

相关问题