3 回答

TA貢獻(xiàn)1824條經(jīng)驗(yàn) 獲得超5個(gè)贊
您重復(fù)分配給 new_data,覆蓋以前的更改。
IE:
new_data[j] = data[j]*2 # won't work data[j] = data[j]*2 # will work.

TA貢獻(xiàn)1775條經(jīng)驗(yàn) 獲得超8個(gè)贊
初始化new_data并data刪除else.
編輯: 這應(yīng)該回答你,它更有效,因?yàn)槟阍谡麄€(gè)數(shù)組中迭代你擁有的間隔數(shù),這對(duì)于大輸入來說會(huì)很慢,但在這里你將遍歷數(shù)組一次。如果你想將其他元素增加三倍,一個(gè)天真的解決方案是在循環(huán)new_data之前乘以 3 ,所以把.fornew_data = np.copy(data)*3
import numpy as np
data = np.array([0,1,2,8,4,5,6,5,4,5,6,7,8])
start = np.array([0,5,7])
end = np.array([3,6,9])
new_data = np.copy(data) # change to new_data = np.copy(data)*3 to triple other elements.
for i in range(len(start)):
for j in range(start[i], end[i]+1):
new_data[j] = data[j]*2
您的代碼中的另一個(gè)注意事項(xiàng)是(j >= start[i]) & (j <= end[i]),這可以簡(jiǎn)化為start[i] <= j <= end[i],可能更快。

TA貢獻(xiàn)1806條經(jīng)驗(yàn) 獲得超8個(gè)贊
我建議使用 python 的zip命令來同時(shí)解壓縮多個(gè)列表。
代碼說明:由于不屬于任何子列表的數(shù)據(jù)點(diǎn)保持不變,我使用 numpy 的copy方法來創(chuàng)建原始數(shù)據(jù)的新副本。然后我將您想要的子列表乘以兩個(gè)。
import numpy as np
data = np.array([0, 1, 2, 8, 4, 5, 6, 5, 4, 5, 6, 7, 8])
start = np.array([0, 5, 7])
end = np.array([3, 6, 9])
new_data = data.copy() #Not to mess up our original dataset.
for s, e in zip(start, end):
new_data[s:e+1] *= 2 #Because it's an inclusive set.
添加回答
舉報(bào)