![](/img/trans.png)
[英]Python - how to for loop an array from not 0th but xth element?
[英]Python - Casting a float as int to be used as array index returns 0th element of the array
我想創建一個新數組,其中包含舊數組中的一些篩選元素
這是數組的樣子:
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() 似乎工作正常,但它不會產生我需要的正確索引值。 這只是循環內任何地方的問題,循環外它按預期工作。
這是整個 function
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))'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.