首页 > 解决方案 > 如何解决 Python 中的 ValueError?

问题描述

我该如何解决这个错误:

ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all().

这是有错误的行:

Kz=(2.01*(max(4.75,z)/zg)**(2/a)*kz_StdRnd[j])

Python:

n_samples=20000 
a1= np.random.uniform(0,1,(n_samples,1))
a10 = np.linspace(1,20000,num=20000)-1+a1/n_samples
kz_StdRnd = 1+0.16*norm.ppf(a10,0.0,1.0)
kz_StdRnd = kz_StdRnd[np.random.permutation(n_samples)]

for j in range(n_samples):
    a=9.5 
    zg=274.32 
    Kz=(2.01*(max(4.75,z)/zg)**(2/a)*kz_StdRnd[j])

标签: pythonvalueerror

解决方案


好像你没有正确使用 np.random.permutation https://numpy.org/doc/stable/reference/random/generated/numpy.random.permutation.html

此函数接受一个数组或 int,然后返回 ndarray。

问题是数组被用作索引。我不认为这是正常的。

kz_StdRnd 是一个函数吗?然后你应该使用 map 将该函数应用于排列数组。

kz_StdRnd = list(map(kz_StdRnd, np.random.permutation(n_samples)))

代替

kz_StdRnd = kz_StdRnd[np.random.permutation(n_samples)]

我模仿了您的代码并进行了一些修改,以使其至少可以无错误地运行。我很确定结果不是你想要的。

  1. 我在同一个模块中将 ppf 函数更改为 pdf 函数。你可能想看看这个页面。似乎 ppf 功能存在一些问题。

https://github.com/scipy/scipy/issues/2888

  1. 我将最后一个代码中的“z”变量更改为“zg”

这是代码:

from scipy.stats import norm
import numpy as np
n_samples=20000
a1 = np.random.uniform(0,1,(n_samples,1))
a10=np.linspace(1,20000, num=n_samples)-1+a1/n_samples
#print(type(a10))
k=1+0.16*norm.pdf(a10,0,1)
p=np.random.permutation(n_samples)
#print("p: ", p)
#print("k: ", k)
k = k[p]
#print("k:", k)
for j in range(n_samples):
    a=9.5
    zg=274.32
    kz=(2.01*(max(4.75,zg)/zg)**(2/a)*k[j])

推荐阅读