python - 你知道改变循环以获得更高效的方法吗?
问题描述
我希望以一种更简单、更高效的方式来处理条件循环。任何人都可以想到一种方法吗?预先感谢您的帮助!!:)
OptVariableControle =np.array([])
j = 1
for i in range (0,27):
if i == 2 :
j = j+1
if i == 5:
j = j+1
if i == 8:
j = j+1
if i == 11:
j = j+1
if i == 14:
j = j+1
if i == 17:
j = j+1
if i == 20:
j = j+1
if i == 23:
j = j+1
OptVariableControle =np.append(OptVariableControle,
(optionsActualise[i] + betas["beta" + str(j)]* (optionsActualise[i]-esperences[i])))
你好,我几乎不可能把我所有的代码都放在这里。但我可以确认 betas 是一个包含 10 个(1 到 10)个元素的字典,optionsActualise 和 esperances 是 np.array 的形状(27,)。
Finaly使它与它一起工作:
betas_arr1 = np.array([betas[f'beta{j}'] for j in range(0, 9)])
OptVariableControle =np.array([])
OptVariableControle = optionsActualise + betas_arr1[np.arange(0, 27) // 3] * (optionsActualise - esperences)
我希望这已经足够了
解决方案
您可以使用模数 (%)运算符。当您检查i
一个数字时,如果它是真的,您想增加j
1。这里有一个模式,您检查的数字在除以 3 时给出 2 的余数,这是您如何实现此模式逻辑以进行检查更简单、高效且紧凑:
OptVariableControle =np.array([])
j = 1
# Replaced 27 by 26 here, as you do not want j to change when i is 26
for i in range (0,26):
if i %3 == 2 :
j = j+1
OptVariableControle =np.append(OptVariableControle,
(optionsActualise[i] + betas["beta" + str(j)]* (optionsActualise[i]-esperences[i])))
推荐阅读
- mysql - Yii2 MySQL如何防止重复选择查询
- sql - 如何提高运行 SQL Server 数据库的 django 站点的数据库查询性能?
- java - Jackson 总是序列化完整对象或总是序列化 id
- java - sybase java DB连接问题
- php - 防止 HTML 输出到 STDOUT - Google App Engine 开发环境
- python - ODEINT 错误:ValueError:使用序列设置数组元素
- android - 通过列表中的两个参数进行领域查询
- python - 从 numpy 向量返回小于 1 的最大值
- asp.net - 使用 Ajax 导航的单页网站
- r - 绘制 Out-of-Bag 误差组合 randomForest 模型的有效方法