繁体   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