python - 笨拙数组中的while循环等效函数/片段
问题描述
我有一个要转换的函数,以便可以与笨拙的数组 1 一起使用。
由于已知原因,其后的函数用于浮点数但不适用于笨拙的数组。
def Phi_mpi_pi(x):
kPI=(3.14159265)
kTWOPI = 2 * kPI
#while ((x.any() >= kPI).any()): x = x - kTWOPI;
#while ((x.any() < -kPI).any()): x = x + kTWOPI;
while ((x >= kPI)): x = x - kTWOPI;
while ((x < -kPI)): x = x + kTWOPI;
return x;
我试图将其转换为 numpy/awkward 兼容的形式,新功能看起来像
def Phi_mpi_pi(x):
kPI=numpy.array(3.14159265)
kPI = kPI.repeat(len(x))
kTWOPI = 2 * kPI
while ((x >= kPI)): x = x - kTWOPI;
while ((x < -kPI)): x = x + kTWOPI;
return x;
这个函数永远停留在while循环中,我找不到调试它的方法。
该函数的任务是将值保持在 +- kPI 之间的尴尬数组中,但此逻辑没有给出所需的结果。
例如
x=ak.Array([[0.7999999999999998, 1.0, -1.3], [], [-1.4], [-1.8000000000000003, -6.1000000000000005, -1.6000000000000005], [-4.6]])
但是 ((x < -kPI)) 这给出了所需的输出。
>>> ak.to_list(x <= -kPI)
[[False, False, False], [], [False], [False, True, False], [True]]
但不是功能
基于while循环的逻辑,所需的输出应该是b/w +- kPI,有什么可以使用的直接或建议吗?
解决方案
我不太明白你想要什么,但这至少可以帮助你调试:
import numpy
import awkward1 as ak
def Phi_mpi_pi(x):
kPI=numpy.array(3.14159265)
kPI = kPI.repeat(len(x))
kTWOPI = 2 * kPI
print("kPI =", kPI)
print("kTWOPI =", kTWOPI)
while ((x >= kPI)):
print(x)
x = x - kTWOPI
while ((x < -kPI)):
print(x)
x = x + kTWOPI
return x
x=ak.Array([[0.7999999999999998, 1.0, -1.3], [], [-1.4], [-1.8000000000000003, -6.1000000000000005, -1.6000000000000005], [-4.6]])
print(Phi_mpi_pi(x))
评论太长了,所以我将其发布为答案,尽管它当然并不直接代表解决方案。
推荐阅读
- python - 如何在 pydantic 中使用没有值的嵌套模型
- node.js - MongoDB 数据库是否容易受到恶意 npm 包的攻击?
- python - 计算均值和 SD 时出现空向量错误
- python - 无法更新模块 Base odoo 10
- python - django 迁移在更改我的 model.py 后没有对我的管理站点进行任何更改
- asp.net-core-mvc - 启动应用程序时,身份不要求应用您的迁移 - Asp.net Core 2.2
- python - 为什么我的 tkinter 标签由 .pack() 排列奇怪,我该如何解决
- c# - 为什么 ClaimsPrinciple.Identity.Name 在 Azure Function 中为 null?
- java - Kotlin 密封类类型检测的 Java 等价物
- android - 使用生成的模板在 VScode 中启动一个 android 项目