以一個10年的持證潛水員身份來回答這個問題。
其實絕大部分吸上了“藍色鴉片”(對潛水上癮)的人都是很純正的海島控,一有假期,甚至用周末擠出一個幾天的小假也要跑到東南亞找個海島趕緊吸兩口緩解一下毒癮。
這時候你需要一份東南亞潛水地圖,絕對實用干貨。
常常有人問我去哪里考證,去哪里潛水。其實潛點介紹的資料網上很多,但沒有最好的潛點,只有最適合的潛點,而每個人的需求都不一樣——有人愛熱鬧,有人愛清靜,有人愛吃海鮮,有人除了潛水還要玩玩別的,有人除了潛水什么都不關心,有人精打細算緊捂錢包,有人就要吃好住好,有人信心不足,希望有一對一教學和導潛……
你去或不去,魚就在哪里,你需要考慮的是時間和交通成本、旅行預算、潛水經驗、語言條件、當地治安等,以及自己對一次旅行的期待。這些,比知道某個潛點“好不好”更重要。
本文對比了泰國、馬來西亞、菲律賓、印尼四個東南亞國家主要潛點的優(yōu)劣,簡單概括:要省錢,去淘島;要適中,去馬來西亞和菲律賓;要頂級體驗,去印尼。當然,這只是我的個人觀點。
跟許多人一樣,我跨出國門的第一站是東南亞。這片地區(qū)距離我們最近,旅行便利,航班密集,物價低廉,值得一去再去。后來,我的腳步從東南亞延伸到印度、中東、歐洲、非洲、加勒比海,也迷上了潛水這個“藍色鴉片”。
暮然回首才發(fā)現,其實不需遠渡重洋,家門口東南亞就坐擁多個全球一流潛點。這里大部分潛點終年水溫在28度以上,讓夏天也只能在冰冷海水中顫抖的歐洲人羨慕不已,不惜萬里飛來。占盡地利的我們又豈能暴殄天物?
從珊瑚礁到百年沉船,從袖珍豆丁海馬到巨型錘頭鯊,從入門級考證到挑戰(zhàn)級技術潛水,從一兩天的消遣到十天八天的船宿……去哪里潛水?這不是個問題。去多少次才夠?這才是最難回答的問題。
有些人總覺得,東南亞很LOW,咱有錢任性,就要去更高大上的地方,大溪地,夏威夷,斐濟,毛里求斯,塞班,巴哈馬……如果你追求奢華度假feel,盡管去。然而,如果你最在乎的是潛水,我可以告訴你,海底世界的含金量跟陸地度假村的標價并不成正比。
潛點的硬指標之一是物種多樣性,通俗說就是能看到很豐富的海洋生物,生物品種多,每一種生物的類別多,其中以珊瑚和魚類品種為代表。珊瑚需要在溫暖健康的水域成長,魚類生存需要食物,洋流帶來浮游物,養(yǎng)活食物鏈低端的生物,也帶來鯊魚這樣的頂級獵食者。
菲律賓、馬來西亞、印尼、巴布亞新幾內亞、東帝汶和所羅門群島之間的海域被稱為“珊瑚大三角”,是全球海洋物種多樣性的中心,也叫“海里的亞馬遜”,面積達570萬平方公里(可憐大堡礁被排擠在外)。
本圖來自維基
而有另外一些潛點,物種多樣性不如東南亞,珊瑚稀稀落落,一片海底沙漠,卻有很突出的亮點,比如說洞穴、沉船、大翅鯨、錘頭鯊、沙丁魚……隨著你“藍色鴉片”的毒癮越來越深,你可能會轉向這些潛點,萬里奔波,轉N趟國際航班,只為了看某一種魚,還不一定能看到。這種癮,誰染上了誰懂。
淘島 潛水工廠
在東南亞,如果你問十個潛水員在哪里考的潛水證,也許有五個會回答:淘島(Koh Tao)。沒有人能說清淘島上有多少家潛水學校、一年培養(yǎng)出多少名潛水員,只能給她一個響亮的外號——“潛水工廠”。
“潛水工廠”的流水線從曼谷就開始運作了。在著名的背包客大本營考山路上,走進一家潛店辦公室,花5分鐘時間,你就能預訂到含曼谷到淘島車船聯(lián)票、淘島度假村住宿及潛水課程的套餐。接下來的幾天,除了吃飯、睡覺和潛水,什么都不用你操心了。
雖然緊挨著游人如織的蘇梅島(Koh Samui)和以滿月派對著稱的帕岸島(Koh Pha Ngan),淘島卻往往被非潛水者忽略。這里有絲毫不遜色于蘇梅和帕岸的悠長細白沙灘,沙灘上游人寥寥,人們不在泳池里學習潛水技巧,就在去往潛點的船上,或者已經在海里潛游。
2008年我在淘島上OW平靜水域課
從淘島走出的潛水員很快會發(fā)現,淘島的海底實在說不上驚艷,珊瑚礁并不壯觀,魚類也不算豐富。淘島最大的優(yōu)勢是便宜。就拿OW(Open Water Diver,開放水域潛水員)課程來說,4天的套餐僅人民幣2000元左右(有些潛店還提供免費住宿),比三亞便宜近半,也比東南亞其它地方便宜得多。更何況,不少課程都安排在泳池進行,海里美不美又有什么關系呢?在淘島考證,在別處休閑潛水(Fun Dive),是最經濟的選擇?!爱厴I(yè)”之后,到蘇梅開摩托車環(huán)島游,到帕岸參加瘋狂的海灘電音派對,就是一個完美假日。
當然,基于淘島的流水線性質,教練一對多教學,能保證的是合格、規(guī)范,但未必能教給你規(guī)定動作以外的東西,比如說他從多年實踐中總結出的潛水經驗和潛水觀念。如果你有更充裕的預算,在其他人少的潛店跟有10年以上教齡的教練進行一對一教學,收獲將是無價的。
難度:★
優(yōu)點:幾乎是全世界考證最便宜的地方
缺點:海洋環(huán)境不佳,學員較多,教學不夠細致
提醒:請謹慎選擇潛店,確保教練和學生比例不超過1:4
交通:直飛曼谷后轉車船聯(lián)運,或飛素叻他尼(Surat Thani)或蘇梅后乘船前往
華語潛店或教練:有
斯米蘭群島
斯米蘭群島(Similan)距離著名的普吉島(Phuket)僅95公里,但往往只會被潛水員列入行程。這里有世界上最大的動物鯨鯊,以及雙翅展開達7米的魔鬼魚,屬于世界級的潛點。只是斯米蘭潛水多為船宿(吃住在船上的多天潛水),適合有50潛以上經驗的潛水員,新手不宜前往,個人也不建議去斯米蘭考OW。(斯米蘭每年5-10月封島,具體日期可咨詢船宿公司)
至于普吉、皮皮(Phi Phi)、甲米(Krabi)等幾個安達曼海的小島都適合潛水,雖然海底環(huán)境比詩巴丹、巴厘島、斯米蘭都要遜色,但綜合海島風景、旅行便利等因素考慮,也不失為理想的潛水度假目的地。
詩巴丹 上帝的水族箱
對于地球上過份美麗的地方,人們喜歡用“上帝的XXX”來贊美,比如說“上帝的自留地”、“上帝的后花園”。至于“上帝的水族箱”,這個美譽屬于馬來西亞沙巴洲的小島詩巴丹(Sipadan)。
詩巴丹是從海底“長”出的竹筍狀海島,游出僅5米左右的淺灘,海水陡然從淺藍變深藍,600米深的峭壁和遮天蔽日的魚群出現在眼前,從海龜到海狼、隆頭鶯哥、白鰭鯊都是尋常風景。在海狼風暴點(Barracuda point),成千上萬條海狼聚成颶風眼狀迅速移動,蔚為壯觀,游著游著,你甚至發(fā)現自己進入了“颶風眼”中心!
淘島的缺點,就是詩巴丹的優(yōu)點,反之亦然。由于詩巴丹實行限額潛水制度,每日僅發(fā)放120張潛水許可證,這里的潛水價格也比東南亞各地高不少。你需要至少提前一個月向當地潛店預訂。不僅如此,島上不允許居住,部分潛店實行捆綁銷售,你必須在周邊小島潛3天以上,才能獲得1次進入詩巴丹的機會,想要去兩次,就得潛6天。另外,由于海水深達600米,常有洋流,不適合新手前往。
作為前往詩巴丹的落腳點,小鎮(zhèn)仙本那(Semporna)已發(fā)展成馬來西亞的淘島,價格比淘島貴,還沒有悠長白沙灘,但依然深受中國考證潛水員的歡迎,也同樣有學員多、教學質量參差的隱患。仙本那附近小島馬布(Mabul)則以微距潛水為主。
難度:★★★
優(yōu)點:海洋環(huán)境佳,魚類豐富,大型魚群尤其多
缺點:潛水限制較多,一度發(fā)生綁架事件
提醒:須提前至少一個月預訂
交通:從廣州或香港直飛沙巴洲首府亞庇(Kota Kinabalu)后轉車前往,或從吉隆坡轉機至斗湖(Tawau)
華語潛店或教練:有
西馬
馬來西亞西海岸的小島蘭卡威(Langkawi)、刁曼島(Tioman)、熱浪島(Redang)、停泊島(Perhentian Kecil)與普吉周邊海島類似,屬于海灘景致優(yōu)美、海底風光尚可的一類,適合休閑度假,不適合以潛水為旅行唯一目的的發(fā)燒級潛水員。比起詩巴丹,這幾個海島距離吉隆坡較近,可以通過車船聯(lián)運到達。
就旅行度假而言,我喜歡泰國勝于菲律賓,前者更干凈有序,除了海島觀光,文化、美食、購物也精彩紛呈。但自從迷上潛水,我護照上的菲律賓簽證數量已經迅速超過了泰國。作為擁有超過7000個海島的群島國家,菲律賓的世界級潛點數目遠遠多于泰國和馬來西亞,想要從容地把這些潛點都潛個遍,至少得一兩個月!
媽媽拍絲瓜附近離島的狹長沙灘,宛如世界盡頭
宿霧 “跳島”潛水
位于米沙鄢群島中心位置的宿霧?。–ebu)是菲律賓潛點最密集的區(qū)域,167個小島中有不少一流潛點。在這里,你可以來一次“跳島”潛水,花上幾個星期,挨個拜訪這些潛點,拜訪海里的美麗生物。
與宿霧島隔宿霧海峽相望的薄荷島(Bohol)是菲律賓僅次于長灘(Boracay)的熱門海濱度假地,除了巧克力山風光和世界上最小的猴子眼睛猴,薄荷周邊的潛點也值得流連。
Alona Beach被菲律賓官方譽為“下一個長灘”,以此美麗海灘為據點,你可以前往邦勞(Panglao)、卡畢佬(Cabilao)、巴里卡薩(Balicasag)乃至杜馬蓋地(Dumaguete)的阿波(Apo)。巴里卡薩的“黑森林”(Black Forest)因大片黑色珊瑚而得名,“天堂”(Heaven)則擁有許多像大教堂一樣的景致,在別處并不常見。
宿霧島東北面的馬拉帕斯加(Malapascua)被潛水員們取其諧音,親昵地稱為“媽媽拍絲瓜”。這里的海底景致不遜于巴里卡薩,尤以尾巴占體長達1/3的長尾鯊(Thresher Sharks)著稱。比起薄荷,“媽媽拍絲瓜”要寧靜得多,適合只想安心過個吃飯、睡覺、潛水簡單假期的人們。
宿霧島西南的墨寶(Moalboal)曾以遮天蔽日的沙丁魚風暴著稱,2011年地震后,大隊沙丁魚搬家,好在這兩年又回來了。
難度:★★
優(yōu)點:潛點密集,行程豐富,海底景致佳
缺點:游客較多,對海洋的保護意識遜于詩巴丹
提醒:行程不宜安排得太緊張,在多個潛點間奔波不如精選一兩個地方潛個夠
交通:可從香港直飛宿霧市,或經馬尼拉轉機至宿霧、薄荷島上機場塔比拉蘭(Tagbilaran)或杜馬蓋地
華語潛店或教練:有
媽媽島“特產”長尾鯊
科隆 沉船博物館
科?。康聡莻€科隆么?非也。說起這個小鎮(zhèn)的所在地巴拉望省(Palawan),有些人會猛然醒悟——哦!愛昵島(El Nido)就在那里!是的,巴拉望群島被菲律賓旅游局譽為“菲律賓最后的秘境”,更為游人熟知的地點是愛昵島和首府所在地公主港(Puerto Princesa),科?。–oron)尚藏在深閨,安靜等待著潛水員前來探索水下的十余條沉船。
1944年9月24日,停泊在科隆灣的日本艦隊遭遇美國空軍偷襲,至少9艘軍艦和商船,此外還有幾艘不同時間沉沒的商船和漁船。由于此地沉船大多位于水深10米-40米處,終年海水溫暖、洋流微弱,大部分沉船保持著較完整的外形結構,內部坍塌也不多,使得科隆成為世界知名的沉船潛水勝地。
其中,唯一一艘戰(zhàn)艦秋津洲號(Akisushima)長118米,擁有巨型起重機、電報發(fā)射塔和炮臺,令人嘆為觀止。而運油船Okikawa Maru長達160米,為科隆沉船之首。
早在上世紀90年代,科隆就已出現潛水店。如今的科隆儼然一個沉船主題小鎮(zhèn),潛水店數目不亞于飯店和旅館,街上處處可見沉船模型和沉船手繪畫。是的,沉船是這里最大的話題,不感興趣或有幽閉恐懼癥的人棄之如履,熱愛歷史和挑戰(zhàn)自我的人則愛之若狂。較之同樣擁有多艘沉船的蘇比克灣(Subic),科隆灣的海水能見度更高,而蘇比克有不少沉船深度超過40米的休閑潛水極限,更適合技術潛水員前往。
難度:★★★
優(yōu)點:沉船數量多,深度淺,適合休閑潛水
缺點:鎮(zhèn)上基礎設施較差,沒有海灘和豪華度假村,經常停電
提醒:島上ATM有時會罷工,記得帶足現金
交通:距離科隆最近的機場在布桑加島(Busuanga)上,可從馬尼拉或宿霧轉機前往,從愛昵島前往則須坐長達8小時的螃蟹船
華語潛店或教練:有
其它潛點
除了宿霧周邊和科隆,菲律賓值得體驗的潛點還有很多。海豚灣(即波塞羅拉,Puerto Galera,簡稱PG)較為中國潛水員熟悉,阿尼洛(Anilao)以小生物著稱,圖巴塔哈國家公園(Tubbataha)多大型動物,適合船宿。
相比泰國、馬來西亞和菲律賓,“千島之國”印尼距離我們較遠,除巴厘島以外的潛點都需要轉機前往,飛行成本提高了,當地潛水住宿價格也比前面幾個國家高出不少。但一旦你去到當地,你會發(fā)現,所有的舟車勞頓和金錢付出都是值得的!淘島適合作為潛水的起點,而印尼則非初學者樂園,大多數潛點有強流或適合船宿,建議至少累計了30-50潛經驗再前往。
巴厘島 追尋翻車魚
自從巴厘島進入國人視野以來,人們往往把她與“蜜月旅行”聯(lián)系在一起,而忽略了她原來也是個潛水勝地。
巴厘島的潛點相當多,也各具亮點。圖蘭本(Tulamben)有著名的二戰(zhàn)美國貨輪自由號(Liberity),深達65米的峭壁上各種珊瑚令人眼花撩亂。秘密海灣(Secret Bay)顧名思義,人跡罕至,在沙地尋找袖珍動物的體驗能與藍碧媲美。
但奴撒帕尼達(Nusa Pedida)才是巴厘島的王牌潛點,這里聚集了翻車魚(Mola Mola)、魔鬼魚(Manta)、白鰭鯊(White Tip Shark)、鷹鰩(Eagle Ray)等諸多大型海洋生物,而且洋流強、海浪大,潛水體驗非常刺激。
翻車魚是已知體型最大的硬骨魚,翼展近3米,體重能達到3000鎊。它的繁殖和洄游至今仍是個迷,巴厘島是亞洲少數能固定見到其蹤跡的地方,有許多潛水員專奔著它而來。翻車魚在當地冬季也就是8-10月才出來活動,屆時水溫只有20度左右,相當寒冷。但你若能幸運看到翻車魚浮出水面做日光浴,并讓天使魚、清潔蝦等“清潔工”為它清潔皮膚上的寄生蟲和牙縫里的殘屑,那將是畢生難忘的經歷。魔鬼魚的出現沒有特別的季節(jié)性,但它喜歡冷水,所以看翻車魚的季節(jié)也有很大機率能看到魔鬼魚。
潛水之余,可以享受巴厘島海灘和稻田風光,體會獨特的印度教文化,欣賞創(chuàng)意手工藝品。就旅行體驗的豐富多樣而言,巴厘島遠勝于普吉、蘇梅、薄荷等東南亞熱門度假地。
難度:★★★★
優(yōu)點:潛點豐富且各具特色,潛水與旅行度假兩全其美
缺點:奴撒帕尼達洋流強,冬季水溫低,潛水員多
交通:從香港直飛,或經吉隆坡、雅加達轉機前往
華語潛店或教練:有
藍碧 微距天堂
與巴厘島相反,北蘇拉維西省省會美娜多(Manado,又名萬鴉老)的名字對大部分人來說是陌生的。其實,這里早在16世紀就成為荷蘭的第一個海外殖民地,歐洲風情濃郁,島上豐富的丁香與豆蔻等香料更帶給它“香料之島”的美譽。
北蘇拉維西位于亞洲與大洋洲的交匯點,海洋生態(tài)多樣,擁有三大海洋國家公園自然生態(tài)保護區(qū):布納肯(Bunaken)、曼卡(Bangka)和藍碧(Lembeh)。其中藍碧是美娜多的明星潛點,在這里潛水就像是在垃圾里尋寶,英文叫做Muck Diving。
不像其它著名潛點一樣有絢爛的珊瑚礁、令人目瞪口呆的大魚、遮天蔽日的魚群,藍碧的海底平平無奇,甚至還有些許垃圾。但就在這令人失望的外表下,藏著許多容易被忽略的小生物,你需要一個有火眼金睛、對此地了如指掌的潛導,才能在泥沙里找到寶貝,微距攝影發(fā)燒友把這里視為天堂。
寶貝有啥?最討人喜歡的是豆丁海馬(Pygmy Seahorse),這種小生靈身長僅1厘米左右,還善于偽裝,隱秘棲身在海扇珊瑚里,在別的地方也許難得一見,這里卻命中率很高。
藍碧海峽位于北蘇拉威西和藍碧島之間,來自蘇拉威西的火山灰沉淀下來,為海底生物提供了豐富的營養(yǎng),藍碧島又阻擋了風浪,在這里潛水無需像在巴厘島一樣驚心動魄。但中性浮力控制不好的潛水員容易踢起海底淤泥、阻礙視線。而布納肯擁有高300米、長2公里的海底斷崖彩色珊瑚墻,能見度達30-40米,也是個不容錯過的潛點。
藍碧與巴厘島,也恰是優(yōu)劣互補的一對。前往美娜多須轉機,交通成本高,但洋流弱、水溫高,而且游客和潛水員都比巴厘島少得多,沒有擁擠排隊之苦。選巴厘島還是美娜多,頗需要一番糾結,當然最美好的方案是——兩個都去!
難度:★★
優(yōu)點:人少清凈,風平浪靜,還能順便潛布納肯
缺點:交通成本高,中轉費時
交通:國內沒有直飛航班,須經新加坡或雅加達轉機,廣州出發(fā)的往返機票價格約3000元,旺季有航空公司提供廣州包機直航,但往返時間短不夠潛
華語潛店或教練:暫無
其它潛點
印尼的世界一流潛點還有達拉灣(Derawan)、科莫多(Komodo)、安汶(Ambon)和四王群島(Raja Ampat)等,均游客罕至,須轉機前往,是資深潛水員珍愛的目的地。
四王島魔鬼魚
本文圖片:Cobis, Luo Yi, Evolution, Rocksteady, Stefan Soh
如果想了解更多關于潛水入門和安全的干貨,歡迎參加我的live:
潛入深藍:如何安全地享受大海的美?(已超1000人報名)
潛入深藍:如何安全地享受大海的美?分享我在世界各地200多次潛水的難忘經歷:
潛水員眼里的大海到底有多美?(已超1000人報名)
潛水員眼里的大海到底有多美?駱儀,Lonely Planet作者,潛水員,跟你分享超過10年的背包旅行故事:從珠峰到深海,從撒哈拉沙漠到巴以隔離墻,從零下35度雪國到40度火爐……
歡迎關注我的微信公眾號「 駱儀 」(luoyi_gz)
原創(chuàng)文字及圖片版權所有,僅限知乎及知乎官方渠道發(fā)布,未經授權,任何組織或個人不得轉載或節(jié)選摘錄;歡迎轉發(fā)分享
之前看了Mahout官方示例 20news 的調用實現;于是想根據示例的流程實現其他例子。網上看到了一個關于天氣適不適合打羽毛球的例子。
訓練數據:
Day Outlook Temperature Humidity Wind PlayTennis
D1 Sunny Hot High Weak No
D2 Sunny Hot High Strong No
D3 Overcast Hot High Weak Yes
D4 Rain Mild High Weak Yes
D5 Rain Cool Normal Weak Yes
D6 Rain Cool Normal Strong No
D7 Overcast Cool Normal Strong Yes
D8 Sunny Mild High Weak No
D9 Sunny Cool Normal Weak Yes
D10 Rain Mild Normal Weak Yes
D11 Sunny Mild Normal Strong Yes
D12 Overcast Mild High Strong Yes
D13 Overcast Hot Normal Weak Yes
D14 Rain Mild High Strong No
檢測數據:
sunny,hot,high,weak
結果:
Yes=》 0.007039
No=》 0.027418
于是使用Java代碼調用Mahout的工具類實現分類。
基本思想:
1. 構造分類數據。
2. 使用Mahout工具類進行訓練,得到訓練模型。
3。將要檢測數據轉換成vector數據。
4. 分類器對vector數據進行分類。
接下來貼下我的代碼實現=》
1. 構造分類數據:
在hdfs主要創(chuàng)建一個文件夾路徑 /zhoujainfeng/playtennis/input 并將分類文件夾 no 和 yes 的數據傳到hdfs上面。
數據文件格式,如D1文件內容: Sunny Hot High Weak
2. 使用Mahout工具類進行訓練,得到訓練模型。
3。將要檢測數據轉換成vector數據。
4. 分類器對vector數據進行分類。
這三步,代碼我就一次全貼出來;主要是兩個類 PlayTennis1 和 BayesCheckData = =》
package myTesting.bayes;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.util.ToolRunner;
import org.apache.mahout.classifier.naivebayes.training.TrainNaiveBayesJob;
import org.apache.mahout.text.SequenceFilesFromDirectory;
import org.apache.mahout.vectorizer.SparseVectorsFromSequenceFiles;
public class PlayTennis1 {
private static final String WORK_DIR = "hdfs://192.168.9.72:9000/zhoujianfeng/playtennis";
/*
* 測試代碼
*/
public static void main(String[] args) {
//將訓練數據轉換成 vector數據
makeTrainVector();
//產生訓練模型
makeModel(false);
//測試檢測數據
BayesCheckData.printResult();
}
public static void makeCheckVector(){
//將測試數據轉換成序列化文件
try {
Configuration conf = new Configuration();
conf.addResource(new Path("/usr/local/hadoop/conf/core-site.xml"));
String input = WORK_DIR+Path.SEPARATOR+"testinput";
String output = WORK_DIR+Path.SEPARATOR+"tennis-test-seq";
Path in = new Path(input);
Path out = new Path(output);
FileSystem fs = FileSystem.get(conf);
if(fs.exists(in)){
if(fs.exists(out)){
//boolean參數是,是否遞歸刪除的意思
fs.delete(out, true);
}
SequenceFilesFromDirectory sffd = new SequenceFilesFromDirectory();
String[] params = new String[]{"-i",input,"-o",output,"-ow"};
ToolRunner.run(sffd, params);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("文件序列化失??!");
System.exit(1);
}
//將序列化文件轉換成向量文件
try {
Configuration conf = new Configuration();
conf.addResource(new Path("/usr/local/hadoop/conf/core-site.xml"));
String input = WORK_DIR+Path.SEPARATOR+"tennis-test-seq";
String output = WORK_DIR+Path.SEPARATOR+"tennis-test-vectors";
Path in = new Path(input);
Path out = new Path(output);
FileSystem fs = FileSystem.get(conf);
if(fs.exists(in)){
if(fs.exists(out)){
//boolean參數是,是否遞歸刪除的意思
fs.delete(out, true);
}
SparseVectorsFromSequenceFiles svfsf = new SparseVectorsFromSequenceFiles();
String[] params = new String[]{"-i",input,"-o",output,"-lnorm","-nv","-wt","tfidf"};
ToolRunner.run(svfsf, params);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("序列化文件轉換成向量失?。?#34;);
System.out.println(2);
}
}
public static void makeTrainVector(){
//將測試數據轉換成序列化文件
try {
Configuration conf = new Configuration();
conf.addResource(new Path("/usr/local/hadoop/conf/core-site.xml"));
String input = WORK_DIR+Path.SEPARATOR+"input";
String output = WORK_DIR+Path.SEPARATOR+"tennis-seq";
Path in = new Path(input);
Path out = new Path(output);
FileSystem fs = FileSystem.get(conf);
if(fs.exists(in)){
if(fs.exists(out)){
//boolean參數是,是否遞歸刪除的意思
fs.delete(out, true);
}
SequenceFilesFromDirectory sffd = new SequenceFilesFromDirectory();
String[] params = new String[]{"-i",input,"-o",output,"-ow"};
ToolRunner.run(sffd, params);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("文件序列化失??!");
System.exit(1);
}
//將序列化文件轉換成向量文件
try {
Configuration conf = new Configuration();
conf.addResource(new Path("/usr/local/hadoop/conf/core-site.xml"));
String input = WORK_DIR+Path.SEPARATOR+"tennis-seq";
String output = WORK_DIR+Path.SEPARATOR+"tennis-vectors";
Path in = new Path(input);
Path out = new Path(output);
FileSystem fs = FileSystem.get(conf);
if(fs.exists(in)){
if(fs.exists(out)){
//boolean參數是,是否遞歸刪除的意思
fs.delete(out, true);
}
SparseVectorsFromSequenceFiles svfsf = new SparseVectorsFromSequenceFiles();
String[] params = new String[]{"-i",input,"-o",output,"-lnorm","-nv","-wt","tfidf"};
ToolRunner.run(svfsf, params);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("序列化文件轉換成向量失??!");
System.out.println(2);
}
}
public static void makeModel(boolean completelyNB){
try {
Configuration conf = new Configuration();
conf.addResource(new Path("/usr/local/hadoop/conf/core-site.xml"));
String input = WORK_DIR+Path.SEPARATOR+"tennis-vectors"+Path.SEPARATOR+"tfidf-vectors";
String model = WORK_DIR+Path.SEPARATOR+"model";
String labelindex = WORK_DIR+Path.SEPARATOR+"labelindex";
Path in = new Path(input);
Path out = new Path(model);
Path label = new Path(labelindex);
FileSystem fs = FileSystem.get(conf);
if(fs.exists(in)){
if(fs.exists(out)){
//boolean參數是,是否遞歸刪除的意思
fs.delete(out, true);
}
if(fs.exists(label)){
//boolean參數是,是否遞歸刪除的意思
fs.delete(label, true);
}
TrainNaiveBayesJob tnbj = new TrainNaiveBayesJob();
String[] params =null;
if(completelyNB){
params = new String[]{"-i",input,"-el","-o",model,"-li",labelindex,"-ow","-c"};
}else{
params = new String[]{"-i",input,"-el","-o",model,"-li",labelindex,"-ow"};
}
ToolRunner.run(tnbj, params);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("生成訓練模型失?。?#34;);
System.exit(3);
}
}
}
package myTesting.bayes;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import org.apache.commons.lang.StringUtils;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.fs.PathFilter;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.mahout.classifier.naivebayes.BayesUtils;
import org.apache.mahout.classifier.naivebayes.NaiveBayesModel;
import org.apache.mahout.classifier.naivebayes.StandardNaiveBayesClassifier;
import org.apache.mahout.common.Pair;
import org.apache.mahout.common.iterator.sequencefile.PathType;
import org.apache.mahout.common.iterator.sequencefile.SequenceFileDirIterable;
import org.apache.mahout.math.RandomAccessSparseVector;
import org.apache.mahout.math.Vector;
import org.apache.mahout.math.Vector.Element;
import org.apache.mahout.vectorizer.TFIDF;
import com.google.common.collect.ConcurrentHashMultiset;
import com.google.common.collect.Multiset;
public class BayesCheckData {
private static StandardNaiveBayesClassifier classifier;
private static Map<String, Integer> dictionary;
private static Map<Integer, Long> documentFrequency;
private static Map<Integer, String> labelIndex;
public void init(Configuration conf){
try {
String modelPath = "/zhoujianfeng/playtennis/model";
String dictionaryPath = "/zhoujianfeng/playtennis/tennis-vectors/dictionary.file-0";
String documentFrequencyPath = "/zhoujianfeng/playtennis/tennis-vectors/df-count";
String labelIndexPath = "/zhoujianfeng/playtennis/labelindex";
dictionary = readDictionnary(conf, new Path(dictionaryPath));
documentFrequency = readDocumentFrequency(conf, new Path(documentFrequencyPath));
labelIndex = BayesUtils.readLabelIndex(conf, new Path(labelIndexPath));
NaiveBayesModel model = NaiveBayesModel.materialize(new Path(modelPath), conf);
classifier = new StandardNaiveBayesClassifier(model);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("檢測數據構造成vectors初始化時報錯。。。。");
System.exit(4);
}
}
/**
* 加載字典文件,Key: TermValue; Value:TermID
* @param conf
* @param dictionnaryDir
* @return
*/
private static Map<String, Integer> readDictionnary(Configuration conf, Path dictionnaryDir) {
Map<String, Integer> dictionnary = new HashMap<String, Integer>();
PathFilter filter = new PathFilter() {
@Override
public boolean accept(Path path) {
String name = path.getName();
return name.startsWith("dictionary.file");
}
};
for (Pair<Text, IntWritable> pair : new SequenceFileDirIterable<Text, IntWritable>(dictionnaryDir, PathType.LIST, filter, conf)) {
dictionnary.put(pair.getFirst().toString(), pair.getSecond().get());
}
return dictionnary;
}
/**
* 加載df-count目錄下TermDoc頻率文件,Key: TermID; Value:DocFreq
* @param conf
* @param dictionnaryDir
* @return
*/
private static Map<Integer, Long> readDocumentFrequency(Configuration conf, Path documentFrequencyDir) {
Map<Integer, Long> documentFrequency = new HashMap<Integer, Long>();
PathFilter filter = new PathFilter() {
@Override
public boolean accept(Path path) {
return path.getName().startsWith("part-r");
}
};
for (Pair<IntWritable, LongWritable> pair : new SequenceFileDirIterable<IntWritable, LongWritable>(documentFrequencyDir, PathType.LIST, filter, conf)) {
documentFrequency.put(pair.getFirst().get(), pair.getSecond().get());
}
return documentFrequency;
}
public static String getCheckResult(){
Configuration conf = new Configuration();
conf.addResource(new Path("/usr/local/hadoop/conf/core-site.xml"));
String classify = "NaN";
BayesCheckData cdv = new BayesCheckData();
cdv.init(conf);
System.out.println("init done...............");
Vector vector = new RandomAccessSparseVector(10000);
TFIDF tfidf = new TFIDF();
//sunny,hot,high,weak
Multiset<String> words = ConcurrentHashMultiset.create();
words.add("sunny",1);
words.add("hot",1);
words.add("high",1);
words.add("weak",1);
int documentCount = documentFrequency.get(-1).intValue(); // key=-1時表示總文檔數
for (Multiset.Entry<String> entry : words.entrySet()) {
String word = entry.getElement();
int count = entry.getCount();
Integer wordId = dictionary.get(word); // 需要從dictionary.file-0文件(tf-vector)下得到wordID,
if (StringUtils.isEmpty(wordId.toString())){
continue;
}
if (documentFrequency.get(wordId) == null){
continue;
}
Long freq = documentFrequency.get(wordId);
double tfIdfValue = tfidf.calculate(count, freq.intValue(), 1, documentCount);
vector.setQuick(wordId, tfIdfValue);
}
// 利用貝葉斯算法開始分類,并提取得分最好的分類label
Vector resultVector = classifier.classifyFull(vector);
double bestScore = -Double.MAX_VALUE;
int bestCategoryId = -1;
for(Element element: resultVector.all()) {
int categoryId = element.index();
double score = element.get();
System.out.println("categoryId:"+categoryId+" score:"+score);
if (score > bestScore) {
bestScore = score;
bestCategoryId = categoryId;
}
}
classify = labelIndex.get(bestCategoryId)+"(categoryId="+bestCategoryId+")";
return classify;
}
public static void printResult(){
System.out.println("檢測所屬類別是:"+getCheckResult());
}
}
1. 請介紹一下WebGIS的概念和作用,以及在實際應用中的優(yōu)勢和挑戰(zhàn)。
WebGIS是一種基于Web技術的地理信息系統(tǒng),通過將地理數據和功能以可視化的方式呈現在Web瀏覽器中,實現地理空間數據的共享和分析。它可以用于地圖瀏覽、空間查詢、地理分析等多種應用場景。WebGIS的優(yōu)勢包括易于訪問、跨平臺、實時更新、可定制性強等,但也面臨著數據安全性、性能優(yōu)化、用戶體驗等挑戰(zhàn)。
2. 請談談您在WebGIS開發(fā)方面的經驗和技能。
我在WebGIS開發(fā)方面有豐富的經驗和技能。我熟悉常用的WebGIS開發(fā)框架和工具,如ArcGIS API for JavaScript、Leaflet、OpenLayers等。我能夠使用HTML、CSS和JavaScript等前端技術進行地圖展示和交互設計,并能夠使用后端技術如Python、Java等進行地理數據處理和分析。我還具備數據庫管理和地理空間數據建模的能力,能夠設計和優(yōu)化WebGIS系統(tǒng)的架構。
3. 請描述一下您在以往項目中使用WebGIS解決的具體問題和取得的成果。
在以往的項目中,我使用WebGIS解決了許多具體問題并取得了顯著的成果。例如,在一次城市規(guī)劃項目中,我開發(fā)了一個基于WebGIS的交通流量分析系統(tǒng),幫助規(guī)劃師們評估不同交通方案的效果。另外,在一次環(huán)境監(jiān)測項目中,我使用WebGIS技術實現了實時的空氣質量監(jiān)測和預警系統(tǒng),提供了準確的空氣質量數據和可視化的分析結果,幫助政府和公眾做出相應的決策。
4. 請談談您對WebGIS未來發(fā)展的看法和期望。
我認為WebGIS在未來會繼續(xù)發(fā)展壯大。隨著云計算、大數據和人工智能等技術的不斷進步,WebGIS將能夠處理更大規(guī)模的地理數據、提供更豐富的地理分析功能,并與其他領域的技術進行深度融合。我期望未來的WebGIS能夠更加智能化、個性化,為用戶提供更好的地理信息服務,助力各行各業(yè)的決策和發(fā)展。
這塊您需要了解下stm32等單片機的基本編程和簡單的硬件設計,最好能夠了解模電和數電相關的知識更好,還有能夠會做操作系統(tǒng),簡單的有ucos,freeRTOS等等。最好能夠使用PCB畫圖軟件以及keil4等軟件。希望對您能夠有用。
1.負責區(qū)域大客戶/行業(yè)客戶管理系統(tǒng)銷售拓展工作,并完成銷售流程;
2.維護關鍵客戶關系,與客戶決策者保持良好的溝通;
3.管理并帶領團隊完成完成年度銷售任務。
你好,面試題類型有很多,以下是一些常見的類型:
1. 技術面試題:考察候選人技術能力和經驗。
2. 行為面試題:考察候選人在過去的工作或生活中的行為表現,以預測其未來的表現。
3. 情境面試題:考察候選人在未知情境下的決策能力和解決問題的能力。
4. 案例面試題:考察候選人解決實際問題的能力,模擬真實工作場景。
5. 邏輯推理題:考察候選人的邏輯思維能力和分析能力。
6. 開放性面試題:考察候選人的個性、價值觀以及溝通能力。
7. 挑戰(zhàn)性面試題:考察候選人的應變能力和創(chuàng)造力,通常是一些非常具有挑戰(zhàn)性的問題。
需要具體分析 因為cocoscreator是一款游戲引擎,面試時的問題會涉及到不同的方面,如開發(fā)經驗、游戲設計、圖形學等等,具體要求也會因公司或崗位而異,所以需要根據實際情況進行具體分析。 如果是針對開發(fā)經驗的問題,可能會考察候選人是否熟悉cocoscreator常用API,是否能夠獨立開發(fā)小型游戲等等;如果是針對游戲設計的問題,則需要考察候選人對游戲玩法、關卡設計等等方面的理解和能力。因此,需要具體分析才能得出準確的回答。
以下是一些可能出現在MyCat面試中的問題:
1. 什么是MyCat?MyCat是一個開源的分布式數據庫中間件,它可以將多個MySQL數據庫組合成一個邏輯上的數據庫集群,提供高可用性、高性能、易擴展等特性。
2. MyCat的優(yōu)勢是什么?MyCat具有以下優(yōu)勢:支持讀寫分離、支持分庫分表、支持自動切換故障節(jié)點、支持SQL解析和路由、支持數據分片等。
3. MyCat的架構是怎樣的?MyCat的架構包括三個層次:客戶端層、中間件層和數據存儲層??蛻舳藢迂撠熃邮蘸吞幚砜蛻舳苏埱螅虚g件層負責SQL解析和路由,數據存儲層負責實際的數據存儲和查詢。
4. MyCat支持哪些數據庫?MyCat目前支持MySQL和MariaDB數據庫。
5. MyCat如何實現讀寫分離?MyCat通過將讀請求和寫請求分別路由到不同的MySQL節(jié)點上實現讀寫分離。讀請求可以路由到多個只讀節(jié)點上,從而提高查詢性能。
6. MyCat如何實現分庫分表?MyCat通過對SQL進行解析和路由,將數據按照一定規(guī)則劃分到不同的數據庫或表中,從而實現分庫分表。
7. MyCat如何保證數據一致性?MyCat通過在多個MySQL節(jié)點之間同步數據,保證數據的一致性。同時,MyCat還支持自動切換故障節(jié)點,從而保證系統(tǒng)的高可用性。
8. MyCat的部署方式有哪些?MyCat可以部署在單機上,也可以部署在多臺服務器上實現分布式部署。
對。根據查詢《小小蟻國》游戲攻略得知,海島螞蟻是海島特有的特殊兵種,在海島地圖上有屬性加成,不可在其他島嶼進行使用。
需要考慮以下幾個方面:
1. 增加歷史文化元素。經典海島通常擁有悠久的歷史和文化背景,可以加入相關的歷史文化元素,如博物館、古跡、文化節(jié)慶等。
2. 改善基礎設施。經典海島通常有完善的基礎設施,如酒店、餐廳、商店等,可以改善海島的基礎設施,提高游客的舒適度和體驗感。
3. 提高服務質量。經典海島的服務質量通常非常高,可以提高海島的服務質量,如提供更多的旅游咨詢服務、導游服務等,以提高游客的滿意度。
4. 引入更多的旅游項目。經典海島通常擁有各種各樣的旅游項目,如水上運動、潛水、觀光等,可以引入更多的旅游項目,以增加游客的體驗和樂趣。
5. 加強環(huán)境保護。經典海島通常擁有優(yōu)美的自然風景和生態(tài)環(huán)境,可以加強環(huán)境保護工作,保護海島的自然環(huán)境和生態(tài)系統(tǒng),以保持海島的美麗和獨特性。