python - 如何解决 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])
解决方案
好像你没有正确使用 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)]
我模仿了您的代码并进行了一些修改,以使其至少可以无错误地运行。我很确定结果不是你想要的。
- 我在同一个模块中将 ppf 函数更改为 pdf 函数。你可能想看看这个页面。似乎 ppf 功能存在一些问题。
https://github.com/scipy/scipy/issues/2888
- 我将最后一个代码中的“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])
推荐阅读
- reactjs - reactjs形式的多个文件上传器
- javascript - nuxt vuex模块中的自调度动作
- regex - 使用正则表达式从 Html 中成对匹配值
- git - Intellij中的Git rebase - 如何一键选择所有临时提交作为“壁球”?
- c# - 将列列表和数据列表合并到列表 C#
- node.js - 如何正确使用 morgan 和 nginx?
- c# - 如何对winform按键和按钮事件进行单元测试
- javascript - JavaScript 箭头函数
- postgresql - org.postgresql.util.PSQLException:错误:插入或更新表违反外键约束
- javascript - 为什么初始 CSS 样式在 DOM element.style 字段上不可见?