榮登Nature,時隔15年NumPy論文終發表!

2021-01-11 新智元

NumPy是一個強大、緊湊和表達力強的語法來訪問、操作和計算向量、矩陣和高維數組的科學計算庫。

NumPy 是構建Python 科學計算生態系統的基礎。一些有特定需求的項目已經開發了它們自己的類似 NumPy 的接口和數組對象。

由於其在生態系統中的核心地位,NumPy 越來越多地充當這些數組計算庫之間的「互操作層」,並與其應用程式編程接口(API)一起提供了一個靈活的框架,以支持未來的科學計算和工業分析。

早在上世紀90年代還沒有NumPy的時候,當時流行的是「Numeric」,它是基於C語言編寫的,在Python中提供了數組對象和array-aware函數。它最早的用途之一是引導 C+ + 應用於勞倫斯利弗莫爾國家實驗室的慣性約束聚變研究。

為了處理來自哈勃空間望遠鏡的大型天文圖像,「Numarray 」重新實現了 Numeric,增加了對於結構化數組、靈活索引、內存映射、字節順序變量、高效的內存使用、 IEEE 754標準錯誤處理以及更好的類型轉換規則的支持。

儘管 Numarray 與 Numeric 高度兼容,但這兩個軟體包的差異已經足夠讓整個開發者社區分成兩個派系。

而2005年 NumPy 的橫空出世,成為了「兩個世界中的最佳的統一」,它結合了 Numarray 的特性和Numeric 的small數組性能,同時也提供了豐富的C API。

15年後的今天,NumPy 支撐著幾乎所有進行科學計算的 Python 庫,包括 SciPy、Matplotlib、 pandas、 scikit-learn和 scikit-image等等。

NumPy 是一個社區開發的開放源碼庫,它提供了一個多維 Python 數組對象以及對其進行操作的array-aware函數。但由於其的簡單易用的特性,NumPy array是 Python 中數組數據的實際上的交換格式。

NumPy 使用CPU對內存數組進行操作。為了利用現代化的、專門化的存儲和硬體,最近幾年出現了大量 Python 數組包。與 Numarray和Numeric 不同的是,這些新出現的庫現在產生一些分歧,因為大量的工作都是構建在NumPy之上。

然而,為了向開發者社區提供新的和探索性的技術,NumPy 正在過渡到一種中央協調機制,這種機制指定一個定義良好的數組編程 API,並根據需要將其分配給專門的數組實現。

NumPy中的array是一種數據結構,可以有效地存儲和訪問多維數組(也稱為張量) ,並支持各種科學計算。

它包括一個指針以及用於解釋存儲在其中的數據的元數據metadata,特別是「數據類型」、「形狀」和「步長」。

數據類型data type用來描述存儲在數組中的元素的性質。數組元素具有相同的數據類型,數組中的每個元素在內存中佔用相同的字節數。數據類型包括實數、複數、字符串、時間戳和指向 Python 對象的指針等。

數組的形狀決定了每個軸上的元素數量,軸的數量是數組的維數。例如,向量可以存儲為一維數組,視頻信息是形狀為 (t,m,n,3) 的四維數組。

步長是要將線性存儲元素的計算機內存解釋為多維數組的必要條件,它描述在內存中向前移動的字節數,從一行跳到另一行,從一列跳到另一列等等。

例如,一個形狀為(4,3)的二維浮點數組,其中每個元素在內存中佔用8個字節,要在連續的列之間移動,我們需要在內存中向前跳轉8個字節,並訪問下一行,即3 × 8 = 24個字節。因此,該數組的步幅為(24,8)。

NumPy 可以按 C 或 Fortran 內存順序存儲數組,首先對行或列進行迭代。這也代表允許用這些語言編寫的外部庫直接訪問內存中的 NumPy 數組數據。

用戶使用「indexing」索引來訪問子數組或單個元素、「operators」如,+ 、-和 × 用於向量化操作、「@」用於矩陣乘法,以及array-aware函數與 NumPy 數組進行交互;。

這些方法和操作一起為數組提供了易讀、表達性強的高級 API,同時還可以通過底層來保證快速的運算。

對數組進行索引和切片可以返回滿足特定條件的單個元素、子數組等。數組甚至可以使用其他數組進行索引。檢索子數組的索引將返回原始數組的「視圖」 ,這樣兩個數組之間就可以共享數據,這為在限制內存使用的同時對數組數據的子集進行操作提供了一種強大的方法。

為了補充數組語法,NumPy 對數組執行向量化計算的函數,包括算術、統計和三角圖形學等。「矢量化」、「在整個數組而不是單個元素上操作」對於數組編程來說是必不可少的。

這意味著以往使用C語言需要數十行代碼才能表示的操作通常可以使用一個簡單清晰的Python表達式即可實現。這將產生簡潔的代碼,使得用戶專注於他們分析的細節,同時NumPy還以近乎最優的方式處理數組元素循環。

在具有相同形狀的兩個數組上執行向量化操作時,應該發生什麼是顯而易見的。NumPy通過「廣播」機制來允許維度不同的數組之間進行運算,並產生符合直覺的結果。例如可以把數組和標量進行相加,但是廣播也可以推廣到更複雜的例子,比如縮放數組的每一列或者生成坐標網格。

NumPy 還可以對數組進行其他一系列操作,如:reshape,concatenate,padding,search,sort,count等。它也為生成偽隨機數提供了廣泛的支持,並且可以使用一些後端來執行加速線性代數,比如 OpenBLAS或者 Intel MKL。

總而言之,NumPy在內存中的數組表示法,類似數學的語法,以及各種效用函數的組合形成了一個有效的和強有力的數組程式語言。

Python 是一種開源的、通用型的解釋型程式語言,非常適合標準的編程任務,比如清理數據、與 web 資源交互以及解析文本等。加上快速的數組運算和線性代數,科學家們可以用一種程式語言來完成所有的工作。這種語言的優勢在於易於學習和教學,許多大學將其作為主要學習語言就是明證。

儘管 NumPy 不是 Python 標準庫的一部分,但是它受益於與 Python 開發者的良好關係。多年來,Python 語言增加了新的特性和特殊的語法,使得 NumPy 具有更簡潔、更容易閱讀的數組表示。但是,由於它不是標準庫的一部分,因此 NumPy 能夠指定自己的發布策略和開發模式。

SciPy 和 Matplotlib 與 NumPy 聯繫是非常密切的。SciPy 提供科學計算的基本算法,包括數學、科學和工程等。Matplotlib 則可以生成圖形和可視化。

NumPy,SciPy 和 Matplotlib 的結合,加上先進的交互式環境,如 IPython或者 Jupyter,為 Python 中的數組編程提供了堅實的基礎。

科學的 Python 生態系統建立在這個基礎之上,提供了幾個廣泛使用的庫,這些庫反過來又構成了許多領域特定項目的基礎。NumPy 是array-aware庫生態系統的基礎,它設置文檔標準,提供數組測試基礎設施,並增加對 Fortran 和其他編譯器的構建支持。

許多研究小組設計了大型、複雜的科學計算的庫,為生態系統增加了特定於應用程式的功能。例如,由EHT合作開發的用於射電幹涉成像、分析和模擬的 eht-imaging 庫,依賴於科學 Python 生態系統中許多較低層次的組件。

尤其是,EHT 使用這個庫進行了第一次黑洞成像。在 eht-imaging 中,NumPy 數組用於存儲和處理處理鏈中的每個步驟中的數字數據: 從原始數據到校準和圖像重建。

SciPy 為一般的圖像處理任務提供支持工具,如過濾和圖像對齊,而 scikit-image 是一個擴展 SciPy 的圖像處理庫,提供更高級的功能,如邊緣過濾器和 Hough 變換、優化模塊執行最優化操作等。

NetworkX是一個用於複雜網絡分析的軟體包,用於驗證圖像比較的一致性。Astropy處理標準的天文文件格式並計算時間坐標轉換。Matplotlib 用於數據可視化和生成黑洞的最終圖像。

這個生態系統還提供了IPython 或Jupyter等 非常適合探索性數據分析的工具。用戶可以流暢地檢查、操作和可視化他們的數據,並快速迭代以優化編程語句。

這些語句被拼接成命令式或函數式程序,或者同時包含計算和敘述的Notebook。探索性工作的科學計算通常在文本編輯器或集成開發環境(IDE)(如 Spyder)中完成。這種豐富和高效的環境使 Python 在科學研究中受到歡迎。

近年來,數據科學、機器學習和人工智慧的快速發展進一步大大推動了 Python 的科學應用。其重要應用的例子,如 eht 圖像庫,現在幾乎存在於自然科學和社會科學的每一個學科。這些工具已經成為許多領域的主要軟體環境。

NumPy和它的 API 一樣已經變得無處不在。

NumPy 在 CPU上提供內存中的多維均勻類型的數組。它可以在從嵌入式設備到世界上最大的超級計算機上運行,其性能接近編譯語言。

然而,科學數據集現在經常超過單臺機器的內存容量,可能存儲在多臺機器上或雲端。此外,最近對加速深度學習和人工智慧應用的需求導致了專門的加速器硬體的出現,包括GPU,TPU,FPGA等。

由於其內存中的數據模型,NumPy 目前無法直接利用這種存儲和專用硬體。但是分布式數據以及 gpu、 gpu 和 fpga 的並行執行都很好地映射到了數組編程的模式: 因此現代硬體架構與利用其計算能力所需工具之間還存在著差距。

Commuinty為填補這一空白所做的努力導致了數組實現的激增。例如,每個深度學習框架都創建了自己的數組; PyTorch、 Tensorflow、 Apache MXNet和 JAX 數組都具有以分布式方式在 cpu 和 gpu 上運行的能力,它們使用延遲計算來支持額外的性能優化。

SciPy 和 PyData/Sparse 都提供稀疏數組,稀疏數組通常包含很少的非零值,並且只在內存中存儲這些值以提高效率。

此外,還有一些項目將 NumPy 數組構建為數據容器,並擴展其功能。通過這種方式,Dask 使分布式數組成為可能。

這樣的庫通常會模仿 NumPy API,因為這降低了新用戶進入的門檻,並且為更廣泛的社區提供了一個穩定的數組編程/服務接口,同時反過來又防止了破壞性的分裂,比如 Numeric 和 Numarray 之間的分歧。

但是,探索使用數組的新方法本質上還處於試驗階段,事實上,一些庫(如 Theano 和 Caffe)已經停止了發展。每當用戶決定嘗試新技術時,他們必須更改 import 語句並確保新庫實現了他們當前使用的 NumPy API 的所有部分。

理想情況下,使用 NumPy 函數或語義在專門的數組上進行操作,可以簡單地工作,這樣用戶就可以一次性編寫代碼,然後在 NumPy 數組、 GPU 數組、分布式數組等適當的數組之間進行切換,非常方便。

NumPy 的API和數組協議向生態系統提供了新的數組

這些數組協議現在是 NumPy 的一個關鍵特性,預計只會越來越重要。NumPy 開發人員(其中許多人是本文的作者)反覆改進和添加協議設計,以提高實用性和簡化使用的方式。

NumPy最初是由學生、教職員工和研究人員開發的,目的是為 Python 提供一個先進的、開放源碼的數組編程庫,該庫可以免費使用,不受許可證伺服器和軟體保護和加密的限制。

一開始只是嘗試向 Python 添加一個數組對象,後來成為一個充滿活力的生態系統的基礎。現在,大量的科學工作依賴於 NumPy ,它不再是一個小型的社區項目,而是核心的科學基礎設施。

在未來十年,NumPy的開發人員將面臨幾個挑戰。

新的設備將會被開發出來,現有的專業硬體將面臨摩爾定律逐漸失效的情況。將會有更多的數據科學從業者使用 NumPy以外的工具。新一代語言、解釋器和編譯器,如 Rust55、 Julia56和 LLVM57,將創建新的概念和數據結構,來挑戰NumPy的地位。

但不論如何,NumPy準備好了迎接這樣一個不斷變化的環境,並繼續在交互式科學計算中發揮領導作用,不斷滿足下一個十年的科學計算需求。

參考連結:

https://www.nature.com/articles/s41586-020-2649-2

相關焦點

  • 15年!NumPy論文終出爐,還登上了Nature
    強大的線性代數、傅立葉變換和隨機數功能今日,NumPy 核心開發團隊的論文終於在 Nature 上發表,詳細介紹了使用 NumPy 的數組編程(Array programming)。這篇綜述論文的發表距離 NumPy 誕生已經過去了 15 年。
  • NumPy論文登上Nature;高效Transformer綜述
    清華大學教授、IEEE Fellow 張長水等人廣泛閱讀和總結了自 21 世紀初到 2019 年的 300 餘篇論文,寫了一篇關於 FSL 的綜述文章。這篇綜述文章回顧了 FSL 的演進歷史和當前進展,將 FSL 方法分為基於生成模型和基於判別模型兩大類,並重點介紹了基於元學習的 FSL 方法。
  • 幸福來得很突然,中山大學兩篇論文同一日被《nature》Online發表
    中山大學校長羅俊團隊論文 中山大學新任校長帶來的捷報2018年8月29日,國際權威期刊《nature》刊登了通訊作者為中山大學新任校長羅俊,物理與天文學院,青年教授薛超為並列一作的論文《Measurements
  • 寶雞文理學院馮海濤博士在Nature子刊和JACS等國際期刊發表論文
    )上,論文第一作者為馮海濤博士,寶雞文理學院是第一通訊單位,寶雞文理學院AIE中心名譽主任、香港科技大學唐本忠院士為論文通訊作者,這也是寶雞文理學院第一次以第一單位在高水平Nature子刊上發表學術論文。
  • 十年磨一劍,基礎科研的不易,浙江大學連續發表多篇SCI頂刊論文
    基礎科研的重大突破在科技部不唯SCI論文的大潮流下,2020年3月5日,浙江大學再次在世界頂級科技期刊《nature》發表論文,這是2020年浙江大學收穫的第五篇頂級NS主刊論文,一月份兩篇《Science》,2月份一篇《nature》一篇《
  • 校友費繼鋒以第一作者在《Nature》上發表論文
    1月24日,青島農業大學94級植保校友、華南師範大學腦科學與康復醫學研究院青年拔尖人才費繼鋒博士,與全球10餘家科研機構的研究者,以共同第一作者,在自然雜誌(Nature)在線發表論文,實現華師科研歷史性突破。
  • 頂尖SCI論文有多難?直到2015年武漢大學才斬獲第一篇《nature》
    頭版首頁的論文2020年3月11日,世界頂級科技期刊《nature》在線發表了武漢大學物理科學與技術學院袁聲軍教授與國內外研究團隊關於石墨烯氣體通透極限的最新研究成果,武漢大學用頭版首頁的新聞做了報導,雖然石墨烯屬於非常熱度高的材料學科,但是該篇論文並不是屬於材料化工領域灌水的應用論文
  • 邵振華研究員團隊在Nature Communications發表論文揭示GPCR識別藥物新機制
    近日,生物治療國家重點實驗室邵振華研究員團隊在國際期刊Nature Communications(影響因子12.1)上發表了題為「Structure of the human gonadotropin-releasing hormone receptor GnRH1R reveals an unusual ligand binding mode」的研究論文,揭示GPCR識別藥物新機制。
  • ...Nature Structural & Molecular Biology 上發表研究論文
    近日,生物治療國家重點實驗室董浩浩研究員團隊在國際期刊 Nature Structural & Molecular Biology(IF:12.109)上發表了題為 「Structural insights into outer membrane asymmetry maintenance
  • 《環球科學》網站上線「nature專區」,可免費閱讀nature完整論文
    在「nature專區」可查看每期《自然》學術論文的中文摘要,點擊每篇摘要後附帶的連結,網頁會自動跳轉至《自然》論文的全文頁面,供用戶閱讀論文。2014年底,自然出版集團宣布,該集團旗下《自然》等49種學術期刊將通過全球特約媒體免費分享論文,以促進科學家與公眾的交流。作為全球最重要的科學與公眾交流平臺,《科學美國人》全球14個國際版本,同時成為nature首批特約媒體,獲得授權在官網免費向公眾分享自然出版集團下屬49種期刊的完整論文。
  • Numpy學習打卡task03
    歐洲最早的統計學著作可以追溯到1663年,John Graunt發表了《關於死亡率法案的自然和政治觀察》。統計學思想的早期應用圍繞著國家根據人口和經濟數據制定政策的需要,因此其統計學的起源也就隨之而來。19世紀初,統計學科的範圍擴大到包括一般數據的收集和分析。今天,統計學被廣泛地應用於政府、商業、自然科學和社會科學。
  • 139年前發表中國首篇《Nature》
    能夠在CNS(Cell+Nature+Science)等國際頂級期刊上發表論文,對於大多數科研人員來說,可謂是孜孜以求,其實,早在139年前的清朝末期,中國人就在《Nature》上發表了第一篇論文Nature雜誌由英國Nature Publishing Group創刊於1869年,
  • 材料學院黃曉旭教授團隊在《Nature》上發表論文
    材料學院黃曉旭教授團隊在《Nature》上發表論文 2020-02-25 11:38 來源:澎湃新聞·澎湃號·政務
  • 北京大學、南京大學聯手發表國際頂級論文《Nature》!
    相關論文以題為「Stable, high-performance sodium-based plasmonic devices in the near infrared」於2020年5月27日發表在Nature上。
  • 最快被撤稿的Nature封面論文:邢立達等撤回琥珀中發現恐龍的論文
    2020年3月12日,中國地質大學邢立達及其合作者在 Nature 雜誌發表了封面論文,報導了報導了在琥珀中發現的「世界最小恐龍」,該研究成果很快被廣泛報導,並引起了較大關注。論文揭示了恐龍中前所未有的極端「小型化」現象,以及「過去未知的身體藍圖」和「未知的生態(類型)」,可以說是一項很有趣的發現,因此該論文不僅登上了國際頂尖學術期刊 Nature ,還被選為封面論文,據BioWorld統計,21世紀以來,我國學者僅有15篇論文登上Nature封面(包括這一篇)。
  • 14篇Nature論文合集!「DNA元件百科全書」公布第三階段成果
    「DNA元件百科全書」(ENCyclopedia of DNA Elements,ENCODE)國際合作計劃於2003年啟動,合作團隊由美國國立人類基因組研究所北京時間2020年7月29日晚23時,ENCODE計劃發布第三階段成果,公布了超過120萬個人類與小鼠體內調控基因的候選功能性元件。《自然》、《自然—方法》和《自然—通訊》聯合發表14篇論文描述了這一結果,為基因組組織和功能帶來了新的認知。
  • Nature非編碼RNA重要論文被撤,涉多名華人科學家
    近日,世界頂級科技期刊《nature》對2014年發表題為《miR-34a blocks osteoporosis and bone metastasis by inhibiting osteoclastogenesis and Tgif2》的論文做出撤稿的決定,該篇論文當時揭示了miR-34a作為關鍵的破骨細胞抑制劑和潛在的治療策略
  • 科學網乾貨:淺談如何發表Nature論文
    自上次在Nature Biotechnology發表論文以來,已經大約一年了。最近,又在Nature發表了一篇論文。不過,這一次我並不是論文的主要作者,只是普通掛名而已。但不管怎樣,也算是一篇Nature論文吧。
  • 14歲進中科大、19歲到麻省理工讀博,曹原再次連發2篇Nature論文
    他曾是一個神童,僅用3年的時間讀完小學、初中和高中的課程,求學期間,便展現出了不凡的天賦, 更受到了學校的精心培養,22歲便榮登《自然》年度科學人物榜首,被國際學術界關注。他就是出生於1996年的青年科學家曹原。
  • 我校教師曹志林在Nature Communication發表研究成果
    相關研究成果於8月13日以「Chromatin loops associated with active genes and heterochromatin shape rice genome architecture for transcriptional regulation」為題在線發表於國際著名學術期刊《Nature》的子刊《Nature Communications》(https://www.nature.com