亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

帶索引的嵌套循環

帶索引的嵌套循環

米脂 2022-10-25 15:38:33
我正在嘗試解決以下簡化問題。我有一個包含數據的數組和兩個存儲了開始和結束索引的數組。我想要的是將位于索引之間的數據集的值加倍(因此介于并包括 start[0]、end[0] 和 start[1]、end[1] 等)。我嘗試了一個嵌套循環,如下所示: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.zeros(len(data))for i in range(len(start)):   for j in range(len(data)):       if (j >= start[i]) & (j <= end[i]):            new_data[j] = data[j]*2       else:            new_data[j] = data[j]結果應該是 [0,2,4,16,4,10,12,10,8,10,6,7,8],但代碼返回: [ 0. 1. 2. 8. 4. 5 . 6. 10. 8. 10. 6. 7. 8.]只有最后一個索引之間的部分是正確的。任何想法為什么?如果我想將不滿足 if 語句的值增加三倍怎么辦?
查看完整描述

3 回答

?
滄海一幻覺

TA貢獻1824條經驗 獲得超5個贊

您重復分配給 new_data,覆蓋以前的更改。

IE:

new_data[j] = data[j]*2 # won't work
data[j] = data[j]*2     # will work.


查看完整回答
反對 回復 2022-10-25
?
www說

TA貢獻1775條經驗 獲得超8個贊

初始化new_data并data刪除else.


編輯: 這應該回答你,它更有效,因為你在整個數組中迭代你擁有的間隔數,這對于大輸入來說會很慢,但在這里你將遍歷數組一次。如果你想將其他元素增加三倍,一個天真的解決方案是在循環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

您的代碼中的另一個注意事項是(j >= start[i]) & (j <= end[i]),這可以簡化為start[i] <= j <= end[i],可能更快。


查看完整回答
反對 回復 2022-10-25
?
慕森卡

TA貢獻1806條經驗 獲得超8個贊

我建議使用 python 的zip命令來同時解壓縮多個列表。


代碼說明:由于不屬于任何子列表的數據點保持不變,我使用 numpy 的copy方法來創建原始數據的新副本。然后我將您想要的子列表乘以兩個。


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.


查看完整回答
反對 回復 2022-10-25
  • 3 回答
  • 0 關注
  • 116 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號