יותר

מיזוג קווים חופפים מרובים באמצעות Python?


יש לי טופס צורה עם תכונות קו שונות, שחלקן חופפות. האם יש דרך למזג בקלות את כל הקווים החופפים לתכונה אחת חדשה באמצעות Python?

ראיתי כמה פתרונות לחפיפה של מצולעים, אך התקשיתי הרבה יותר למצוא דוגמאות באמצעות קווים.


בפייתון באמצעות ה- פיונה ספרייה לקריאת הקובץ חָטוּב כדי לבצע את פעולות הגיאומטריה קל למזג את הגיאומטריות. לדוגמה:

יבוא פיונה יבוא shapely.geometry יבוא shapely.ops עם fiona.open (נתיב) כ- src: merged_geometries = shapely.ops.linemerge ([shapely.geometry.shape (תכונה ["גיאומטריה"]) עבור תכונה ב- src]

הגיאומטריה הממוזגת תהיה LineString או MultiLineString, תלוי אם ניתן ליצור קו רציף אחד או לא.

לאחר מכן תוכל לכתוב את התוצאה חזרה לטופס צורה באמצעותפיונה(ראה מסמכים על כתיבת קבצים), או באמת עשה עם זה מה שאתה רוצה.

עם fiona.open (נתיב) כ- src: crs = src.crs driver = src.driver schema = {"geometry": merged_geometries.geom_type, "properties": {"length": "float"}} with fiona.open ( out_path, "w", driver = driver, crs = crs, schema = schema) כ- dest: dest.write ({"geometry": shapely.geometry.mapping (merged_geometries), "id": "- 1", "מאפיינים ": {" length ": merged_geometries.length}})

מיזוג קבצי GeoTIFF ליצירת פסיפס

בניתוח שלך סביר להניח שתרצה לעבוד עם שטח גדול יותר מקובץ יחיד, מכמה אריחים לאתר שדה NEON שלם. במדריך זה נדגים כיצד להשתמש בכלי השירות gdal_merge לפסיפת אריחים מרובים יחד. יהיה עליך להתקין את GDAL ואת כריכות ה- GDAL-python במחשב שלך כדי להשתמש בקוד שלמטה.

מטרות

לאחר השלמת הדרכה זו, תוכל:

  • מיזג אריחי סריקה גאוטיפיים מרובים לרסטר יחיד עם פסיפס
  • השתמש בפונקציות raster2array כדי לקרוא raster rif במערך Python

התקן חבילות פייתון

  • תת-תהליך
  • גלוב
  • גדאל
  • אוסג'ו
  • matplotlib
  • קהה

הורד נתונים

קבוצת משנה של נתוני הוראה של NEON: מכון הנתונים 2018

להשלמת חומרים אלה, תשתמש בנתונים הזמינים ממערכי הנתונים להוראת מכון הנתונים של NEON 2018 הזמינים להורדה.

נתוני LiDAR ותמונות המשמשים ליצירת תת-קבוצה זו של הוראת סריקה נאספו מעל אתרי השטח של המצפה הלאומי לאקולוגיה ועובדו במטה NEON. ניתן לגשת לכל מוצרי הנתונים של NEON בפורטל הנתונים של NEON.

בניתוח שלך סביר להניח שתרצה לעבוד עם שטח גדול יותר מקובץ יחיד, מכמה אריחים לאתר שדה NEON שלם. במדריך זה נדגים כיצד להשתמש בכלי השירות gdal_merge לפסיפת אריחים מרובים יחד.

ניתן לעשות זאת בשורת פקודה, או כפקודת מערכת דרך Python כפי שמוצג בשיעור זה. אם התקנת את Python באמצעות Anaconda, עליך להוריד את gdal_merge.py לתיקיה שלך, בנתיב הדומה ל- C: Users user AppData Local Continuum Anaconda3 Scripts. אתה יכול גם להוריד אותו כאן ולשמור אותו בספריית העבודה שלך. לפרטים על gdal_merge עיין באתר gdal.

נתחיל בייבוא ​​החבילות הבאות:

ערכו רשימה של קבצים לפסיפס באמצעות glob.glob, והדפיסו את התוצאה. בדוגמה זו אנו בוחרים את כל הקבצים המסתיימים ב- _aspect.tif בתיקיה TEAK_Aspect_Tiles. שים לב כי יהיה עליך לשנות את נתיב זה בהתאם למכונה המקומית שלך.

על מנת להפעיל את הפונקציה gdal_merge, אנו זקוקים לקבצים אלה כסדרה של מחרוזות. אנו יכולים להשיג אותם בפורמט הנכון באמצעות להצטרף:

כעת, כשיש לנו את רשימת הקבצים שאנו רוצים לפסיפס, נוכל להפעיל פקודת מערכת שתשלב אותם לסרגל אחד.

גדול! נראה כי GDAL מיזג את הקבצים יחד לקובץ TEAK_Aspect_Mosaic.tif. ראוי לציין כאן כי לפונקציה gdal_merge יש הרבה אפשרויות והיא חזקה וגמישה במיוחד. אנו מציעים שתקרא כאן את תיעוד הפונקציה GDAL ותנסה עם הפקודות שלך. זה יכול להיות קל יותר לתרגל תחילה בשורת הפקודה, אך שילוב של סקריפטים של פיתון ופונקציות של שורת פקודה כאן (כמו בשימוש בפונקציה os.system ()) הוא שימושי להפליא לעיבוד מערכי נתונים גדולים.

כעת אנו יכולים להגדיר ואז להשתמש בפונקציה raster2array כדי לקרוא במערך הפסיפס. פונקציה זו ממירה את קובץ ה- geotif למערך, וגם שומרת מטא-נתונים רלוונטיים (למשל מידע מרחבי) למטא-נתונים דו-ערכיים. טען או ייבא פונקציה זו לתא שלך באמצעות% load raster2array. שים לב כי פונקציה זו מחייבת את החבילות המיובאות בתחילת מחברת זו על מנת להריץ.

אנו יכולים לקרוא לפונקציה זו באופן הבא:

התבונן בגודל האריח בפסיפס באמצעות. צורה. מכיוון שיצרנו פסיפס של ארבעה אריחים של 1000 מטר x 1000 מטר, אנו מצפים שהאריח החדש יהיה 2000 מטר x 2000 מטר


מבוא

שיבוט גנים נדרש בדרך כלל כדי ללמוד את תפקודי הגן in vivo ו- in vitro. לרוב, הגן המדאיג קושר לווקטור בשיטה קנונית של חיתוך אנזים והגבלה של האנזים, או הטכניקה החדשה של קשירה חלקה (Okegawa & amp Motohashi, 2015). כדי להבטיח כי רצף הגן נכון בתוך הפלסמיד הבנוי, נעשה שימוש ברצף הסנגר לרצף הגן, והתוצאות מיושרות ונבדקות (צימרמן ואח ', 1988).

רצף סנגר הוא טכנולוגיית רצף דנ"א על ​​ידי שילוב דידו-סינוקליאוטידים המפסיקים את השרשרת, אשר מתויגים בצורה פלואורסצנטית וניתנים לקריאה על ידי מכונות רצף אוטומטיות. רצף סנגר יושם באופן נרחב לקביעת רצף ה- DNA מאז דווח לראשונה על ידי סנגר ואח '. (1977) וסנגר, ניקלן ואמפס קולסון (1977). אף על פי שהרצף של הדור הבא החל עידן חדש, רצף סנגר הוא עדיין אחת השיטות הפופולריות ביותר בזכות האמינות, הנוחות וההיתכנות שלו (שוסטר, 2008). עם זאת, מספר הנוקלאוטידים שנקבעו על ידי תגובת רצף אחת של סאנגר הוא סביב 1,000. עבור אותם גנים באורכים של כמה מאות נוקלאוטידים בלבד, ניתן לעבור על כל אחד מהרצפים השלמים בתגובת רצף אחת של סנגר, ואת התוצאות ניתן ליישר ישירות לקבצי הגן הנכונים. עם זאת, במקרים אחרים, אורכי הגנים עולים על אלף נוקלאוטידים, מעבר לתחום תגובה אחת של סנגר. כדי לקבל את הרצף באורך מלא של גן מטרה, יש צורך לבצע רצף הליכה של DNA באמצעות פריימר חדש על בסיס תוצאת הרצף הקודמת. כדי לרצף גן גדול, ייתכן שיהיה צורך במספר תגובות בכיוונים קדימה והפוכה. יש ליישר תוצאות אלה לקובץ הגן הנכון לצורך אישור.

עדיף למזג את כל תוצאות ההליכה לפני היישור עם קובץ הגן הנכון, במקום ליישר כל תוצאת הליכה בקובץ הגן היעד בנפרד (Tang et al., 2020a, 2020b), במיוחד עבור אותם גנים גדולים, שעשויים להסתיים. אורך 10,000 bps. כדי למזג את תוצאות ההליכה המרובות, ניתן ליישם מספר תוכנות מסחריות, כגון DNASTAR (DNASTAR, Inc., מדיסון, WI, ארה"ב), DNAMAN (Lynnon Biosoft, San Ramon, CA, USA), Vector NTI (Thermo Fisher Scientific Inc ., דנבר, קולורדו, ארה"ב) ו- SnapGene (GSL Biotech LLC., סן דייגו, קליפורניה, ארה"ב), אולם הן יקרות. עבור מדע חלבונים וביולוגיה מולקולרית, נעשה שימוש ברצף בעיקר כדי לאשר אם תת-השיבוט או המוטגנזה נכונים. לפיכך, חלק מהפונקציות של תוכנות מסחריות אלה אינן חיוניות, ומחירן של תוכנות אלו עשוי להיות גבוה מדי לעבודה השוטפת של שיבוט מולקולרי.

מבחינת תוכנה חופשית, יש כלי מקוון שמסוגל למזג שברי רצף ארוכים חופפים על בסיס מיזוג התוכנית בסוויטת "EMBOSS" (Bell & amp Kramvis, 2013 Rice, Longden & amp Bleasby, 2000). עם זאת, כלי האינטרנט מסתמך על גישה לאינטרנט ומעמד השרת. "Cap3" היא תוכנית חינמית ויעילה למיזוג שברי DNA, אולם שורת הפקודה מסובכת עבור משתמשים שאינם מכירים פקודות של "Cap3" (Huang & amp Madan, 1999). "Staden", המכיל ממשק משתמש גרפי, מספק חבילה חינמית ועוצמתית לניתוח רצף גנום ענק על ידי שילוב "SPIN" ו- "EMBOSS" (Staden, Judge & amp Bonfield, 2003), שוב, חבילה זו מסובכת עבור חלק מהמשתמשים. .

מאז הניסוי הראשון של הרכבת רצף ה- DNA על ידי המחשב, האלגוריתמים התפתחו במהירות, שניתן לסווג אותם לשלושה סוגים: הראשון הוא שיטת חפיפה-פריסה-קונצנזוס (Batzoglou, 2005), שמיישם גרף חפיפה השני הוא דרכי הגרף של דה ברוין (Idury & amp Waterman, 1995 Pevzner, 1989 Pevzner, Tang & amp Waterman, 2001), המשתמשת בגרף k-mer והאחרון הוא אלגוריתם חמדני, המשתמש ב- k-mer או בגרף חפיפה (Pop, 2009 פופ אנד זלצברג, 2008). מרבית האלגוריתמים הללו מקודדים על ידי C, וזה מאתגר עבור ביולוגים עם פחות רקע תכנותי.

כאן אנו מציגים סקריפט של פייתון המסוגל למזג מספר קבצי רצף של סנגר חופפים על ידי שימוש במודול היישור של ביופיתון (Cock et al., 2009). כדי לדמיין את הפרמטרים הקריטיים של תהליך המיזוג, אנו מדפיסים את פלט היישור ומציגים את הצומת הקריטי ברצף הממוזג. התסריט שימושי למיזוג רצפי הסנגר והגברת היעילות של שכפול משנה.


1. הקדמה

מיפוי הוא אחד הנושאים המהותיים והקשים ביותר ברובוטיקה, ומשך יותר ויותר תשומת לב מאז העבודה המכוננת שהוצגה בסמית 87. בעשורים האחרונים הוצעו גישות יעילות רבות Thrun05 לבנות כמה סוגים של מפות סביבה, כגון מפת רשת Giorg07, מפת תכונות John11, מפה טופולוגית Lui12, מפה היברידית Bibby10 וכו '. כמעין מפה הסתברותית, מפת רשת תפוסה אינה נדרשת כדי לחלץ תכונות מיוחדות מסביבות, כך שהיא יכולה לדגם בקלות סוגים שרירותיים של סביבות. לכן, מפת הרשת היא אחת מייצוגות המפות הפופולריות ביותר במיפוי רובוטים. עם זאת, רוב הגישות למיפוי רובוטים יכולות לבנות רק מפה אחת לסביבות בקנה מידה בינוני. עבור הסביבה בקנה מידה גדול, רוב-רובוטים צריכים לחקור בשיתוף פעולה חלקים שונים של אותה סביבה כדי לבנות מפת רשת ביעילות ודיוק טובים. הבעיה המרכזית היא כיצד לשלב מפות רשת מקומיות אלה שנבנו על ידי רובוטים מרובים במפה גלובלית אחת.

למיזוג זוג מפות רשת, Carpin e t a l. ראה בכך את בעיית האופטימיזציה Carpin05, שם יש לחפש את הטרנספורמציה האופטימלית כדי ליישר שתי מפות רשת שיש למזג. בהמשך הוצעו שתי גישות חיפוש סטוכסטיות לפתרון בעיית אופטימיזציה זו Carpin05 Carpin06. באופן דומה, Li e t a l.

הציע גישה למיזוג מפת רשת על בסיס האלגוריתם הגנטי

Li14. למרות שגישות אלה עשויות להשיג את השינוי הקשיח האופטימלי, כולן גוזלות זמן בשל אופי החיפוש הממצה. בניגוד לגישות מיזוג פסיביות אלה, כמה חוקרים הציעו כששני רובוטים נפגשים באופן אקראי או מחפשים זה את זה במהלך המיפוי, הם יכולים לבצע את מיזוג המפה על ידי קביעת התנוחה היחסית שלהם Howard06 Fox06. יתרה מכך, Carpin e t a l. ואז הציעה גישה למיזוג מפות המבוססת על טרנספורמציית Hough Carpin08

, שיכולים למזג מפות רשת המכילות את תכונות הקו. אף על פי שגישה זו יכולה למזג ביעילות מפת רשת ללא כל מיצוי תכונות קו, יש לשפר עוד יותר את הדיוק שלה בגלל אופי שגיאת הדיסקרטיזציה בתמורת Hough. חוץ מזה, נדרש שמפות הרשת שעשויות להיות ממוזגות יכילו אחוז חופף משמעותי. כדי לטפל בבעיית הדיוק, ג'ו

e t a l. Zhu13 ראה את מיזוג מפת הרשת כבעיית הרישום של נקודת הנקודה והשיג אותה על ידי הנקודה הקרובה ביותר לאיטרציה (TrICP) Chet05 Phils07, שם הפרמטרים הראשוניים מסופקים על ידי גישת מיזוג המפות המבוססת על טרנספורמציית Hough. בינתיים, Blanco e t a l. הציע שיטת ריבוי השערות כדי לספק את הפרמטרים הראשוניים לאלגוריתם רישום קבוצות הנקודות כדי למזג מפות רשת Blanco13. על ידי האישור של מיזוג השערות, הוא יכול להשיג את תוצאת המיזוג החזקה. כדי לטפל בנושא החוסן, Saeedi e t a l. הציע את גישת מיזוג מפות הרשת המשופרת המבוססת על טרנספורמציית Hough, שיכולה למזג זוג מפות רשת גם עם אחוז חופף נמוך Saee14. למיזוג מפות רשת ברזולוציות שונות, Ma e t a l. העלה גישה מבוססת רישום תמונות Ma16, שיכולה לקבוע אם יש למזער או להגדיל את אחת משתי המפות כדי להתמזג עם השנייה. נראה כי גישות מוצעות רבות יכולות למזג זוג מפות רשת בדיוק ויעילות טובים, אך מעט גישות מיזוג יכולות באמת למזג בו זמנית מפות רשת מרובות.

נניח שיש סט מפות מפות לא מסודרות, אשר נבנות על ידי רובוטים מרובים החוקרים חלקים שונים של אותה סביבה גדולה. מפות רשת אלה אינן חופפות זו לזו או חופפות חלקית זו לזו. בהתחשב במפת הייחוס, המטרה של מיזוג מפות רשת מרובות היא לשלב מפות רשת מקומיות אלה במפה גלובלית על ידי חישוב התנועה הגלובלית עבור כל מפת רשת למפת הייחוס. כדי לפתור בעיה זו, מחברים רבים הכריזו כי ניתן להרחיב ישירות את גישות המיזוג הזוגיות שלהם כדי למזג מספר רשתות ברצף. באופן ספציפי יותר, אלגוריתם המיזוג הזוגי יכול למזג שוב ושוב שתי מפות רשת ולשלב אותן ברשת אחת עד שכל מפות הרשת משולבות יחד. עם זאת, גישה מסוג זה סובלת מהבעיה המצטברת בשגיאות. כאמור ב- Zhu13 Ma16, ניתן לראות את בעיית מיזוג מפת הרשת הזוגית כבעיית הרישום הזוגית Besl92 Zhu114. לפיכך, ניתן לראות בבעיה של מיזוג מפות מרובות רשת כבעיית רישום עם מספר תצוגות Huber03 Ajmal06 Zhu16 Evang14 Govindu14 Zhu14 Fed16. עם זאת, יש לספק לרוב ההרשמה מרובת תצוגות את התנועות הראשוניות הטובות מראש Evang14 Govindu14 Zhu14 Fed16. אחרת, הם לא מצליחים לבצע את הרישום עם מספר תצוגות. חוץ מזה, למרות שכמה גישות קיימות יכולות להשיג רישום רב-צפייה ללא תנועות ראשוניות, הן נועדו להתמודד עם סריקת טווח תלת-ממדי ותמיד גוזל זמן Huber03 Ajmal06 Zhu16. לכן נדרש לתכנן גישת רישום אוטומטית עם מספר תצוגות, שיכולה להתמודד ביעילות עם מפות רשת דו-ממדיות. לאחרונה הוצג אלגוריתם של ממוצע תנועות כאמצעי יעיל לפתרון בעיית הרישום מרובת התצוגות Govindu04. אף על פי שגישה זו יכולה להשיג את הרישום הרב-תצוגתי ביעילות, יש לספק לה תנועות גלובליות ראשוניות טובות ותוצאות רישום זוגיות אמינות Govindu14 Govindu06.

בהתבסס על האלגוריתם המקורי של ממוצעי תנועה, מאמר זה מציע גישה למיזוג יעיל של מפת רשת, שיכולה למזג בו זמנית מספר מפות רשת ללא כל מידע מוקדם. מכיוון שקשה לחשב ישירות את התנועות הגלובליות עבור מפות רשת אלה, הגישה המוצעת משיגה מיזוג של מפות רשת מרובות בשלושה שלבים. ראשית, שיטת המיזוג הזוגית מוצגת על מנת לאמוד תנועות יחסית לזוג מפת הרשת, שיש בה כמות מסוימת של חפיפה. מכיוון שאלגוריתם המיזוג הזוגי עשוי להיות מיושם על כמה זוגות מפת רשת, שיש להם אחוזים חופפים נמוכים או אפילו לא חופפים, התנועה היחסית המשוערת עשויה להיות לא אמינה. לכן, כל מפות הרשת והתנועות היחסיות המשוערות משמשות לבניית גרף לא מכוון כדי לדגום את התצלום המחובר המרבי (MCS). על ידי אישור ה- MCS שנדגם עם כל התנועות היחסיות, קל לחשב את התנועות הגלובליות הראשוניות ולבטל את כל התנועות היחסיות שאינן מהימנות. בהמשך, ניתן לאמץ את אלגוריתם ממוצעי התנועה כדי לחדד את התנועות הגלובליות הראשוניות כדי להשיג תנועות גלובליות מדויקות למיזוג מפות רשת מרובות. כדי להמחיש את עליונותה, הגישה המוצעת נבדקת בכמה מערכי נתוני רובוטים אמיתיים.

מאמר זה מאורגן באופן הבא. בסעיף הבא נאמרת בעיית מיזוג מפת הרשת ונסקר בקצרה אלגוריתם TrICP. סעיף 3 מציע את הגישה שלנו למיזוג סימולטני של מפות רשת מרובות. בסעיף 4, הגישה המוצעת נבחנת ומוערכת על ידי שלוש מערכות נתונים של רובוטים אמיתיים. לבסוף, מסקנות מסקנות מסוימות בסעיף 5.


  • ימין : DataFrame או בשם סדרה
  • איך:<'שמאל', 'ימין', 'חיצוני', 'פנימי'>, ברירת מחדל 'פנימי'
  • בתאריך: תווית או רשימה
  • עזב ב : תווית או רשימה, או דמוי מערך
  • ימין על: תווית או רשימה, או דמוי מערך
  • אינדקס שמאל: bool, ברירת מחדל שקר
  • אינדקס ימני: bool, ברירת מחדל שקר
  • סוג : bool, ברירת מחדל שקר
  • סיומות: tuple of (str, str), ברירת מחדל ('_x', '_y')
  • עותק : bool, ברירת מחדל נכון
  • אינדיקטור : bool או str, ברירת מחדל כוזבת
  • לאמת: str, אופציונלי

דוגמה 1: מיזוג שתי מסגרות נתונים עם מספר זהה של אלמנטים:

פלט:

דוגמה 2: מיזוג שתי מסגרות נתונים עם מספר שונה של אלמנטים:

פלט:

אם אנו משתמשים ב- how = "Outer", הוא מחזיר את כל האלמנטים ב- df1 וב- df2, אך אם עמודת האלמנט היא null אז ערך ה- NaN שלה מחזיר.

פלט:

אם אנו משתמשים ב- how = "left", הוא מחזיר את כל האלמנטים המופיעים ב- DataFrame השמאלי.

פלט:

אם אנו משתמשים ב- how = "right", הוא מחזיר את כל האלמנטים המופיעים ב- DataFrame הנכון.

פלט:

תשומת לב חנון! לחזק את היסודות שלך עם קרן פיתון לתכנות קורס ולמד את היסודות.

ראשית, הכנות הראיון שלך שפר את מושגי מבני הנתונים שלך עם ה- פייתון DS קוּרס. וכדי להתחיל במסע הלמידה שלך במכונה, הצטרף למערכת למידה מכונה וקורס בסיסי ברמה # #


להלן מספר דרכים לנקות את הקוד ולהפוך אותו לקריא יותר. זה לא ממש עובר על פונקציונליות יותר מדי מכיוון שאני לא מכיר את pexpect או את התוכנית האחרת שאתה מנסה להתממשק איתה. יש כנראה כמה אופטימיזציות לבצע את לולאת While בתוכנית שלך במיוחד בסופו של דבר שבו אתה משנה את הנגן שאתה לולאה עליו אבל מכיוון שאני לא מכיר אני אשאיר את זה לבד.

מבלי לראות את הקוד או להבין טוב יותר כיצד פועל הבודק / נגן, זה יהיה הטוב ביותר שאוכל לתת לעת עתה.

יבוא שלא נעשה בו שימוש אינו דבר נורא, אך גם לא ממש דבר טוב, עדיף להסיר אותו.

לא נראה שממש מוסכמות למתן שמות מתבצעת בקפידה. לדוגמא יש לך Checker = pexpect.spawn ("./ checker") אבל אחר כך עושים check = Checker.before.strip (). עדיף לעקוב אחר PEP8 ולהתמיד בוועידת שמות למקרה הנחש. אז זה יהיה בודק = pexpect.spawn ("./ בודק")

משתנים בעלי שם דומה יכולים לבלבל. יש לך שחקן ושחקן אבל הם דברים שונים. הכי טוב להיות יותר ספציפי, player_list ו- player_player יהיה טוב יותר.

השתמש באותיות רשימות במקום ליצור רשימה עם ערכי ספריה ואז להוסיף אותם לאינדקס. תוכל לכתוב מחדש

אבל זה נראה קצת אחורה, אז אני הולך לשנות את כל האינדקסים כך ששחקן 1 יהיה באינדקס 0.

השתמש בתחושה הטבעית של בוליאנים במקום לבדוק! = "" איפה היית צריך לעשות אם לבדוק. פייתון יבדוק אם אין אף אחד ועבורך.


2 תשובות 2

יש כמה נקודות שאוכל לתת אולי כדי לעזור.

ראשית, פנדה אינה מעולה במיזוג מסגרות נתונים גדולות באופן כללי מכיוון שבכל פעם שאתה ממזג מסגרת נתונים חדשה למסגרת ישנה, ​​היא יוצרת עותק של שתיהן כדי ליצור מסגרת נתונים שלישית - זה כמובן מתחיל לקחת הרבה זמן בתור שלך לִשְׁלוֹט מסגרת נתונים גדלה בכל שלב.

שנית (לא נבדק), אתה יכול לנסות להתגבר על כל צווארי בקבוק הזיכרון בשלבי המיזוג על ידי ניסיון משהו מטומטם, כמו מיזוג שניים או שלושה קבצים, ואז לכתוב אותו לדיסק. חזור על כך עד שיהיו לך 30 קבצי CSV גדולים יותר, ואז עשה זאת שוב כך שיהיה לך, נניח 10 קבצים וכן הלאה. אני לא בטוח באיזו נקודה אוסף האשפה של פיתון יכניס אתכם לתפקיד הפחתה יחיד, כך שזה יכול אפילו להיות המקרה שתתחילו להשתמש בזיכרון SWAP, מה שהופך את הדברים לאיטיים באמת! פתרון זה יכול לפחות למנוע את זה. עליכם לבצע כל חזרה בפגישת פיתון חדשה.

רעיון אחר, בזמן שאתה קורא את הנתונים מקבצי CSV: אתה יכול להשתמש בכלי מסוף כדי להדביק את כל קבצי ה- CSV בקובץ אחד, ואז לקרוא את זה לפנדות. פַּעַם. ואז בצע פעולות ניקוי נדרשות. הניקוי עשוי להיות כאב (בהתחשב במיזוג הדרישות שלך, אך סביר להניח שתתגבר על זמני ההמתנה הארוכים לפנדות ליצירת העותקים. אם הקבצים שלך נמצאים בתיקייה אחת, תוכל להריץ את הדברים הבאים במסוף כדי להכניס את כולם. קובץ אחד

יש שיטות אחרות כאן, במקרה שתצטרך להשאיר את שורת הכותרת וכו '.


תַקצִיר

משטחי B-spline, המופקים מנתוני חיישנים סרוקים, נדרשים בדרך כלל לייצג עצמים במשימות פיקוח, מדידה, מטרולוגיה והנדסה לאחור. על מנת להביע אובייקט גדול עם דיוק מספק, יש צורך תמיד בסריקות מרובות, המובילות בדרך כלל לתיקונים חופפים, בין היתר בגלל מגבלות מעשיות ודיוק מדידות, אי ודאות במכשירי מדידה, בעיות כיול וכן כישורים. של הנסיין. במאמר זה אנו מציעים רצף פעולה המורכב מחלוקה ומיזוג. בעוד שהראשון מחלק משטח B-spline לתיקונים רבים עם נתונים סרוקים תואמים, האחרון ממזג את הנתונים הסרוקים ואת תיקון פני השטח B- spline החופף. ראשית, כל המקרים החופפים האפשריים של שני משטחי B-spline נמנים ומנותחים מתוך מבט על מיקומי נקודות ההקרנה של ארבע פינות של משטח אחד בפנים המשטח החופף. בשלב הבא, החלוקה הכללית ושיטות המיזוג מפותחות לטיפול בכל המקרים החופפים, ונעשה שימוש בדוגמה מדומה להמחשת נהלים מפורטים שהוזכרו לעיל. בהמשך, מדומים שתי סריקות המתקבלות מסורק לייזר תלת מימדי כדי להביע בית גדול עם משטחי B-spline. תוצאות הסימולציה מראות את היעילות והיעילות של השיטה המוצעת. בכל התהליך הזה, שטח האחסון של נקודות הנתונים אינו מוגדל עם סריקות חופפות חדשות שהושגו, ואף אחת מנקודות החפיפה אינן מושלכות מה שמגדיל את דיוק הייצוג. אנו מאמינים כי לשיטה המוצעת יש מספר יישומים פוטנציאליים בייצוג וביטוי של אובייקטים גדולים עם נתוני סורק לייזר תלת מימדי.


2 תשובות 2

  1. הגישה שלך בסדר.
  2. העבירו את מאות השורות שלכם לפונקציה, ואז פירקו את הפונקציה לגושים בגודל סביר. אם זה עדיין ענק ומכוער, תציג זאת כשאלה נוספת לבדיקת קוד.
  3. אם אירעה שגיאה אחרת IOError, השגיאה לא תיתפס. עם זאת, כאשר ה- Block עם יציאה מכל סיבה שהיא, input_file ו- output_file ייסגרו כהלכה.

בנוסף למה שאמר @JimDennis, ברצוני לציין כי נהוג להדפיס הודעות שגיאה ל- sys.stderr, ולצאת עם מצב שאינו אפס כאשר מתרחשת שגיאה.

כדאי להעביר את שמות הקבצים ל- main () כפרמטרים, כדי לקדם שימוש חוזר בקוד ובדיקתו. ואז ב __main__: אתה יכול לייבא sys ולבדוק אם len (sys.argv) & gt 1. הגדרת הקלט ושמות קבצי הפלט בכך.

(אתה יכול לשמר את התנהגות ברירת המחדל במקרה שבו התוכנית שלך נקראת כשמה שהיא, אך שינויים אלה פירושם גם שכותב ה- CSV המחודש שלך יכול לשמש מודול לתוכנית אחרת).

לאמיתו של דבר זה יהיה טוב עבור לכוון את שם הראשי הנוכחי שלך () למשהו המשקף יותר את תפקודו וכרוך את הטיפול בוויכוח לעטיפה ראשית () שנכתבה לאחרונה סביב הפונקציה שהצגת כאן.

הכללה נוספת תוכל להוסיף מפריד = אף אחד כארגומנט המוגדר כברירת מחדל לפונקציה שלך ובכך להקל על נסיעה של מפרידי הקלט והפלט בתוך הפונקציה.

כל זה תלוי במידת הכללות והשימוש שברצונך שהקוד שלך יהיה. ברור שיש פשרה בין הפונקציונליות הגמישה למורכבות הנוספת שמוצגת שם.


1 תשובה 1

אין דוקסטרינגס. מה עושים פונקציות אלה? אילו טיעונים הם לוקחים? מה הם מחזירים?

מעצבים נקראים בדרך כלל על שם ההשפעה שיש להם על הפונקציה המעוטרת. לדוגמא @ functools.lru_cache מוסיף מטמון LRU לפונקציה @ unittest.skip גורם לדילוג על מקרה הבדיקה וכן הלאה.

ההשפעה של @from_iterable היא שהיא ממירה את הטיעונים לטופל ומעבירה את הטופלה כארגומנט יחיד לפונקציה המקורית. לא הייתי מנחש פונקציונליות זו מהשם למעשה הייתי מנחש את ההפך (שהיא תמיר טיעון איטרטיבי יחיד לטיעונים בודדים).

בתגובות נקבע כי כוונתו של מעצב זה היא להפוך פונקציה לצמד פונקציות כמו שרשרת ושרשרת. מ-_iterable (כאשר הפונקציה המקורית הופכת לזמינה תחת השם האחרון, והפונקציה החדשה תחת השם הקודם).

הצרה בכך היא שרשרת הייתה טעות. אם היה לנו רק chain.from_iterable, אז לא היינו זקוקים לשרשרת, כי היינו יכולים פשוט ליצור כפל: היינו כותבים chain.from_iterable ((arg1, arg2,.)) במקום שרשרת (arg1, arg2,.). זהו שינוי טריוויאלי לקונבנציית הקריאה (רק שני סוגריים) שאינה זקוקה לפונקציה אחרת כדי לתמוך בה. (למשל, זה יהיה מגוחך למיין ולמיין. מ-_iterable.)

מפתחי Python הוגבלו על ידי תאימות לאחור להשאיר את השרשרת לבד, ולכן הדבר היחיד שהם יכלו לעשות היה להוסיף פונקציה נוספת. אני לא חושב שהם התכוונו שזו תהיה תבנית שיש לעקוב אחריה (בוודאי שלא משתמשים בה בשום מקום אחר בספריה הסטנדרטית). עד היום מתכנתים של פייתון המחפשים פונקציה "לשטח" מופתעים לגלות שהיא כבר קיימת בספרייה הרגילה בשם לא ברור.

שים לב שהקוד בהודעה אינו משתמש במיזוג בפועל, הוא משתמש רק במזג. From_iterable. אז הדבר המובן מאליו לעשות יהיה לכתוב מיזוג כך שיידרש חידוש, ולהימנע מהצורך בעיצוב @from_iterable ובבלבול שלו.

מכיוון ש- headA ו- headB אינם משמשים באופן עצמאי זה מזה, תוכל לשנות את מוסכמות השיחות עבור MergeLists כך שתקח מספר שרירותי של רשימות מקושרות, כך:

או אם אתה מעדיף את ההבנה, שקול לשפר את שם משתנה הלולאה. השם i משמש באופן מקובל ל- אינדקס, אבל כאן אנחנו לא חוזרים על אינדקסים, אלא על ערכים, ולכן v או value יהיו ברורים יותר.

הקוד במיזוג אינו משתמש במזהה הפונקציה המובנה, ולכן אין צורך להגדיר את המשתנה כ- id_ על מנת להימנע מהצללה על המובנה.

המיזוג של הפונקציה שומר על שני מבני נתונים. מקור המילון ממפה מזהה מקור לאיטרטור מעל המקור המתאים, וערכי המילון ממפים מזהה מקור לערך שבחזית המקור המתאים. הקוד יהיה פשוט אם שני מבני הנתונים ישולבו לאחד, כך:

צוואר הבקבוק של זמן הריצה הוא הקריאה לדקה כדי למצוא את הערך עם הערך הקטן ביותר. זה לוקח זמן פרופורציונלי למספר שאר החזרות שנותרו, כלומר $ O (l) $.

אנו יכולים לשפר זאת ל- $ O ( log l) $ אם נשמור את הערכים בערימה, באמצעות מודול heapq:


צפו בסרטון: גיאומטריה. חפיפת משולשים - משפט חפיפה צלע צלע זוית (אוֹקְטוֹבֶּר 2021).