簡體   English   中英

超過 32 維的 numpy ndarray

[英]numpy ndarray with more that 32 dimensions

當我嘗試創建一個超過 32 維的 numpy 數組時,出現錯誤:

import numpy as np

np.ndarray([1] * 33)
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-2-78103e601d91> in <module>()
----> 1 np.ndarray([1] * 33)

ValueError: sequence too large; cannot be greater than 32

我發現了這一點: 使用大量維度的 numpy.array 與這個問題相關,但我想在不構建我自己的版本的情況下做到這一點。

我的用例:
我正在使用聯合概率分布,我試圖在軸上表示每個變量,以便對其的計算(邊緣化,減少)是單線操作。 例如,對於邊緣化操作,我可以簡單地對該變量的軸進行求和。 對於乘法,我可以簡單地做一個簡單的 numpy 乘法(在檢查軸是否相同之后)。

有沒有可能的解決方法?

簡單的解決方法

如果你創建一個np.array(np.array(li))
其中li是一個list並且len(li) > 32 ,它將按預期返回一個 ndarray 。

如何將數據保持在一維中,並有選擇地重塑以專注於給定的維度

舉例說明

In [252]: x=np.arange(2*3*4*5)

全面重塑

In [254]: x.reshape(2,3,4,5).sum(2)
Out[254]: 
array([[[ 30,  34,  38,  42,  46],
        [110, 114, 118, 122, 126],
        [190, 194, 198, 202, 206]],

       [[270, 274, 278, 282, 286],
        [350, 354, 358, 362, 366],
        [430, 434, 438, 442, 446]]])

部分重塑 - 相同的數字,不同的結果形狀

In [255]: x.reshape(6,4,5).sum(1)
Out[255]: 
array([[ 30,  34,  38,  42,  46],
       [110, 114, 118, 122, 126],
       [190, 194, 198, 202, 206],
       [270, 274, 278, 282, 286],
       [350, 354, 358, 362, 366],
       [430, 434, 438, 442, 446]])

我不會在任何接近 32+ 維度的東西上測試這個。 正如評論中所指出的,如果許多維度大於 1,則整體數組大小將過大。

截至 2020 年 11 月 17 日,numpy 數組的維數限制仍為 32。為了找出答案,我運行了以下代碼:

for dim in range (1, 100):
    arr_n_dim_list = [1]*dim
    arr_n_dim = np.ones((arr_n_dim_list))
    print(arr_n_dim.shape)

輸出的最后一行是:

ValueError: maximum supported dimension for an ndarray is 32, found 33

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM