超过32维的Numpy数组



当我尝试创建一个超过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。与此问题相关的大量维度数组,但我想这样做而不构建自己的版本。

我的用例:
我正在研究联合概率分布,我试图在一个轴上表示每个变量,这样对它的计算(边缘化,减少)是一个单线操作。例如,对于边际运算,我可以简单地对变量的轴求和。对于乘法,我可以简单地做一个简单的numpy乘法(在检查轴是否相同之后)。

是否有可能解决这个问题?

简单方法

如果创建了np.array(np.array(li))
lilistlen(li) > 32时,它将按预期返回一个数组

如何在一维中维护数据,并有选择地重塑以聚焦于给定维度

来说明

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

使用np.array而不是np.ndarray

相关内容

  • 没有找到相关文章

最新更新