<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                # 使用 Python 數組 > 原文: [http://docs.cython.org/en/latest/src/tutorial/array.html](http://docs.cython.org/en/latest/src/tutorial/array.html) Python 有一個內置數組模塊,支持原始類型的動態一維數組。可以從 Cython 中訪問 Python 數組的底層 C 數組。同時它們是普通的 Python 對象,當使用 [`multiprocessing`](https://docs.python.org/3/library/multiprocessing.html#module-multiprocessing "(in Python v3.7)") 時,它們可以存儲在列表中并在進程之間進行序列化。 與使用`malloc()`和`free()`的手動方法相比,這提供了 Python 的安全和自動內存管理,并且與 Numpy 數組相比,不需要安裝依賴項,如 [`array`](https://docs.python.org/3/library/array.html#module-array "(in Python v3.7)") 模塊內置于 Python 和 Cython 中。 ## 內存視圖的安全使用 ```py from cpython cimport array import array cdef array.array a = array.array('i', [1, 2, 3]) cdef int[:] ca = a print(ca[0]) ``` 注意:導入會將常規 Python 數組對象帶入命名空間,而 cimport 會添加可從 Cython 訪問的函數。 Python 數組使用類型簽名和初始值序列構造。有關可能的類型簽名,請參閱[陣列模塊](https://docs.python.org/library/array.html)的 Python 文檔。 請注意,當將 Python 數組分配給類型為內存視圖的變量時,構造內存視圖會有輕微的開銷。但是,從那時起,變量可以無需開銷即可傳遞給其他函數,只要輸入即可: ```py from cpython cimport array import array cdef array.array a = array.array('i', [1, 2, 3]) cdef int[:] ca = a cdef int overhead(object a): cdef int[:] ca = a return ca[0] cdef int no_overhead(int[:] ca): return ca[0] print(overhead(a)) # new memory view will be constructed, overhead print(no_overhead(ca)) # ca is already a memory view, so no overhead ``` ## 零開銷,不安全訪問原始 C 指針 為了避免任何開銷并且能夠將 C 指針傳遞給其他函數,可以將底層連續數組作為指針進行訪問。沒有類型或邊界檢查,因此請小心使用正確的類型和簽名。 ```py from cpython cimport array import array cdef array.array a = array.array('i', [1, 2, 3]) # access underlying pointer: print(a.data.as_ints[0]) from libc.string cimport memset memset(a.data.as_voidptr, 0, len(a) * sizeof(int)) ``` 請注意,對數組對象的任何長度更改操作都可能使指針無效。 ## 克隆,擴展數組 為了避免必須使用 Python 模塊中的數組構造函數,可以創建一個與模板具有相同類型的新數組,并預分配給定數量的元素。請求時,數組初始化為零。 ```py from cpython cimport array import array cdef array.array int_array_template = array.array('i', []) cdef array.array newarray # create an array with 3 elements with same type as template newarray = array.clone(int_array_template, 3, zero=False) ``` 陣列也可以擴展和調整大小;這避免了重復的內存重新分配,如果元素將被逐個追加或刪除。 ```py from cpython cimport array import array cdef array.array a = array.array('i', [1, 2, 3]) cdef array.array b = array.array('i', [4, 5, 6]) # extend a with b, resize as needed array.extend(a, b) # resize a, leaving just original three elements array.resize(a, len(a) - len(b)) ``` ## API 參考 ### 數據字段 ```py data.as_voidptr data.as_chars data.as_schars data.as_uchars data.as_shorts data.as_ushorts data.as_ints data.as_uints data.as_longs data.as_ulongs data.as_longlongs # requires Python >=3 data.as_ulonglongs # requires Python >=3 data.as_floats data.as_doubles data.as_pyunicodes ``` 使用給定類型直接訪問基礎連續 C 數組;例如,`myarray.data.as_ints`。 ### 功能 以下函數可用于陣列模塊中的 Cython: ```py int resize(array self, Py_ssize_t n) except -1 ``` 快速調整大小/重新分配。不適合重復的小增量;將基礎數組的大小調整為所請求的數量。 ```py int resize_smart(array self, Py_ssize_t n) except -1 ``` 高效率的小增量;使用增長模式,提供攤銷的線性時間附加。 ```py cdef inline array clone(array template, Py_ssize_t length, bint zero) ``` 給定模板數組,快速創建新數組。類型與`template`相同。如果零是`True`,則新數組將用零初始化。 ```py cdef inline array copy(array self) ``` 制作一個數組的副本。 ```py cdef inline int extend_buffer(array self, char* stuff, Py_ssize_t n) except -1 ``` 有效附加相同類型的新數據(例如相同數組類型)`n`:元素數量(不是字節數!) ```py cdef inline int extend(array self, array other) except -1 ``` 使用來自另一個數組的數據擴展數組;類型必須匹配。 ```py cdef inline void zero(array self) ``` 將數組的所有元素設置為零。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看