首頁 >後端開發 >Python教學 >## Flatten 與 Ravel:何時使用每個 NumPy 函數以及為什麼?

## Flatten 與 Ravel:何時使用每個 NumPy 函數以及為什麼?

Susan Sarandon
Susan Sarandon原創
2024-10-28 23:14:301084瀏覽

## Flatten vs. Ravel: When to Use Each NumPy Function and Why?

澄清NumPy 中的Flatten 和Ravel 函數

NumPy 是一個強大的數值運算Python 庫,提供了兩個看似相似的函數:flatten 和拉威爾。兩者的目的都是將多維數組轉換為一維數組。然而,它們之間存在著微妙的區別。

Flatten 和Ravel 的行為

考慮以下NumPy 陣列:

<code class="python">import numpy as np
y = np.array(((1,2,3),(4,5,6),(7,8,9)))</code>

應用flatten 函數結果:

<code class="python">print(y.flatten())
[1   2   3   4   5   6   7   8   9]</code>

應用flatten 函數結果:

<code class="python">print(y.ravel())
[1   2   3   4   5   6   7   8   9]</code>

應用>類似地,ravel 函數產生相同的輸出:

主要差異

  • 雖然兩個函數傳回相同的結果一維數組,其底層行為存在重大差異。
  • 記憶體複製與視圖: Flatten 總是產生原始陣列的副本,建立明顯獨立的資料結構。相較之下,ravel 主要提供原始數組的視圖,共享相同的底層資料。當修改輸出數組時,這種差異變得明顯。對 flatten 傳回的陣列進行變更不會影響原始數組,而 ravel 輸出的修改可能會改變原始數組。
  • 效能注意事項: Ravel 通常比 flatten 更快,因為它不會不需要建立新的記憶體副本。然而,在修改 ravel 傳回的陣列時必須小心謹慎,因為變更可能會無意中影響原始陣列。
特殊情況:

reshape 函數使用 (-1, ) 作為參數可以在某些場景中使用。即使步幅允許,它也會努力產生數組的視圖,即使生成的數組不連續。

摘要

Flatten 和 ravel 都是用來將多維 NumPy 陣列展平為一維。 Flatten 建立記憶體副本,而 ravel 提供視圖。 Ravel 速度更快,但需要仔細考慮修改,特別是在優化效能時。 Reshape((-1,)) 可在特定情況下使用,以最佳化記憶體使用和效能。

以上是## Flatten 與 Ravel:何時使用每個 NumPy 函數以及為什麼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn