python - Python - 将浮点数转换为 int 以用作数组索引返回数组的第 0 个元素
问题描述
我想创建一个新数组,其中包含旧数组中的一些筛选元素
这是数组的样子:
print(freqs[0])
print(freqs[1])
print(freqs[2])
print(freqs[3])
print(freqs[4])
>>(-1.356524149576826+0j)
(-1.5188337718697111-0.0028277787696928914j)
(-1.537925820349816+0.02545857328595845j)
(-1.7483732926022144+0.0875845050778933j)
(-1.8506826888571075+0.16201185108446528j)
当我“手动”投射索引以进行故障排除时,一切正常
print(int(0*scaler), freqs[int(0*scaler)])
print(int(1*scaler), freqs[int(1*scaler)])
print(int(2*scaler), freqs[int(2*scaler)])
print(int(3*scaler), freqs[int(3*scaler)])
print(int(4*scaler), freqs[int(4*scaler)])
>>0 (-1.356524149576826+0j)
0 (-1.356524149576826+0j)
1 (-1.5188337718697111-0.0028277787696928914j)
2 (-1.537925820349816+0.02545857328595845j)
3 (-1.7483732926022144+0.0875845050778933j)
但是,一旦我将这种逻辑放入循环中,我总是会得到第 0 个元素。我加倍检查我的索引变量实际上是一个 int
for i in range(length):
index = int(i*scaler)
if index < length:
newfreqs[i] = freqs[index]
print(i,index,freqs[index])
>>0 0 (-1.356524149576826+0j)
1 0 (-1.356524149576826+0j)
2 1 (-1.356524149576826+0j)
3 2 (-1.356524149576826+0j)
4 3 (-1.356524149576826+0j)
如果我使用 math.floor() 而不是 int(),我会得到完全相同的行为。奇怪的是 round() 似乎工作正常,但它不会产生我需要的正确索引值。这只是循环内任何地方的问题,循环外它按预期工作。
这是整个功能
def reindex(freqs, halfSteps):
scaler = halfStep**(-halfSteps)
newfreqs = freqs
length = len(newfreqs)
for i in range(length):
index = int(i*scaler)
if index < length:
newfreqs[i] = freqs[index]
print(i,index,freqs[index])
return newfreqs
解决方案
将 newfreq 的初始化更改为 'zeros(len(freqs))'
推荐阅读
- flutter - 如何从 Yahoo 日历和 webmail 日历中收集数据以将它们同步到颤振日历应用程序中?
- c# - 编写脚本以在程序中执行重复的业务任务
- bash - 如果一个进程正在运行,那么不要做任何事情
- python - 以大约相等的计算成本将不等大小的 pandas/numpy 数组分箱
- java - 如何解决问题“Java 实例占用了我所有的内存”
- reactjs - 您的 API 密钥无效,请检查您是否正确复制了它
- swift - ViewController 即使强制也不会进入纵向模式
- elasticsearch - elasticsearch相对/更改查询到数字字段
- swift - 如何为视觉框架创建 MLFeatureProvider 类
- javascript - 从 html 模板或反应组件创建 base64 图像