Python 板


LINE

接著幫回 也說明一下我的想法 不管怎樣 直接貼code給大家看我還是覺得不是很好 不是有沒有誠意 是這樣看code真的很容易誤看 沒有色碼 縮排又痛苦… 我先貼的原po的code ( 參考https://webptt.com/m.aspx?n=bbs/C_and_CPP/M.1460282360.A.ADC.htmlhttps://ideone.com/3wBqbL 雖然不行run完 但至少好讀 怕以後連結不見的話,ptt貼code可以放最後,有需要再去看 然後縮8格...有點逼我吉娃娃…看開點 個人建議4格就好 ※ 引述《TuCH (謬客)》之銘言: : 先稍微整理一下 : ※ 引述《MAGICXX (逢甲阿法)》之銘言: : : 大家好 : : 1. : : 我現在有一組程式碼有問題 : : upperb=NDVI_LST[col[0]]>0.0 : : lowerb=NDVI_LST[col[0]]<0.1 : : edge_1=NDVI_LST[(upperb & lowerb)] : col_0 = col[0] : col_1 = col[1] 的確, col 0 跟 1 如果常用到 寫成變數是好事 一來維護簡潔 二來執行有可能加速 三來字數可能變少 : upperb=NDVI_LST[col_0]>0.0 : lowerb=NDVI_LST[col_0]<0.1 : edge_1=NDVI_LST[(upperb & lowerb)] : : lst_values=[] : : for i in edge_1[col[0]]: : : LST=NDVI_LST.loc[NDVI_LST[col[0]]==i,col[1]] : : NDVI=i # 這行不知道在幹嘛 的確 整個code沒用到 建議刪除 通用會這樣寫只有可能為了可讀性或延用到別人function的變數名調整而已 : : for j in LST.values: : : lst_values.append(j) 這段理解後似乎也沒有必要 你開了一個空list 然後把pd的LST轉np的array 再一個一個值塞回去… 你可以簡單的tolist() (如果你需要python的list的話) 或是list_values = LST.values (怕不小心改到值的話用copy) : : df.loc[0.0,'w1月']=max(lst_values) 最後只找max的話 pandas也有max可以用(還會幫忙去掉nan值) 上面提到塞list的動作也可以省略 : # 這段看不懂在幹嘛 : max_lst_values = edge_1[col_1].max() : min_lst_values = edge_1[col_1].min() : : lst_values=[] : : for i in edge_1[col[0]]: : : LST=NDVI_LST.loc[NDVI_LST[col[0]]==i,col[1]] : : NDVI=i : : for j in LST.values: : : lst_values.append(j) : : df.loc[0.0,'d1月']=min(lst_values) : : 因為我現在會需要有12個月的重複計算以及 : : upperb以及lowerb的重複計算(0.0 ,0.1, 0.2, 0.3.....1.0) 需要回圈跑的東西通通for loop就可以了 12個月、upperb、lowerb什麼的 沒有什麼是不能for loop的 下面的整段code我研究了一下 給你一些建議: 1. for i in range(10) a. i已經是整數 int(i)顯得多餘 b. 整段code的i for loop 只對NDVI_bound取index得到值 何不直接for loop NDVI_bound[:-1] 反正i+1也只是+0.1 2. 你的 lst_values=[] 應該是放錯位置了 從append方式很奇怪之外,這個變數也沒有被用到(for i j loop) for k loop有用到 但內圈 i j loop一直洗掉 lst_values 想必有問題 個人通靈建議lst_values=[]至少提升至for k loop下 : : 原本我是用下面的code跑 可是每次都會剩下最後一個值然後把前面的值蓋掉 : : NDVI_bound=np.around(np.linspace(0,1,11).tolist(),decimals=2) : : for k in range(1,13): : : for j in range(23): : : for i in range(10): : : upperb=NDVI_LST[col[int(j)]]>NDVI_bound[int(i)] : : lowerb=NDVI_LST[col[int(j)]]<NDVI_bound[int(i)+1] : : edge_1=NDVI_LST[(upperb & lowerb)] : : lst_values=[] : : for l in edge_1[col[int(j)]]: : : LST=NDVI_LST.loc[NDVI_LST[col[int(j)]]==l,col[int(j)+1]] : : NDVI=i : : for m in LST.values: : : lst_values.append(m) : : if lst_values==[]: : : df.loc[NDVI_bound[int(i)+1],'w'+str(k)+'月']=0 : : df.loc[NDVI_bound[int(i)+1],'d'+str(k)+'月']=0 : : else: : : df.loc[NDVI_bound[int(i)+1],'w'+str(k)+'月']=max(lst_values) : : df.loc[NDVI_bound[int(i)+1],'d'+str(k)+'月']=min(lst_values) : : 我想問一下大家 這樣要怎麼縮減這個程式碼才會是對的? 你是說 indent 吧? 縮排 如上通靈 放至for k loop 裡 : : 不然我光是用一個一個貼 就要2000多行程式碼 可是明明是重複做一樣的動作... 用幾行算錢的話 這樣也不錯啊... 不過感覺這不是主要問題 你forloop沒事 存值邏輯要調整而已 如果上面通靈有誤 那你必需開更多的欄位來儲存結果 : 這邊完全沒有對K做操作 請檢查一下code跟邏輯 原po的k是用來幫df塞月份的值的 應該是lst_values=[]寫在for loop i造成的誤會 : : 2.查表 : : 我找的值是從上面那張表出來的 : : D1 W1 : : 0.1 23.7 22.4 : : 0.2 25.8 26.88 : : 0.3 29.8 30.64 : : . : : . : : . : : 1.0 35.26 38.31 : : 我現在給他一個值 他要怎麼找到在這張表的哪個範圍? : : 比如說 我現在給他27.33這個數值 他要怎麼找到是在0.2~0.3之間 : : 然後跟我說上限是29.8 下限是25.8 這樣? : : 有兩個問題 再麻煩各位了QQ : binary search 給個方向 找27.33 >= D1的最後一個true對應到的就是下限25.8 找27.33 < D1的第一個true對應到的就是上限29.8 配合index可以找到0.2~0.3之類的東西 建議寫成function比較不影響程式整體的邏輯思考 p.s. 真的不外包給我嗎 省時省力 --



※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 122.116.120.190 (臺灣)
※ 文章網址: https://webptt.com/m.aspx?n=bbs/Python/M.1619066109.A.046.html
1F:推 MAGICXX: 肛溫蛤~ 04/22 16:09







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:e-shopping站內搜尋

TOP