Python-将float转换为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,freqs[index])
        
    return newfreqs

解决方法

将newfreq的初始化更改为'zeros(len(freqs))'

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...