【问题标题】:numpy ndarray with more that 32 dimensions具有超过 32 个维度的 numpy ndarray
【发布时间】:2016-09-05 07:46:13
【问题描述】:

当我尝试创建一个超过 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

我发现这个:Using numpy.array with large number of dimensions 与这个问题有关,但我想在不构建自己的版本的情况下这样做。

我的用例:
我正在使用联合概率分布,我试图在轴上表示每个变量,以便对其进行计算(边缘化、减少)是单行操作。例如,对于边缘化操作,我可以简单地对该变量的轴进行求和。对于乘法,我可以简单地做一个简单的 numpy 乘法(在检查轴是否相同之后)。

有没有可能的解决方法?

【问题讨论】:

  • 解决方法取决于我想的用例。愿意提供更多背景信息吗?
  • 你知道一个 32 维数组,即使它只有 [2]*32 的最小形状和 float32 dtype,也会占用 16gb 的内存?

标签: python python-3.x numpy multidimensional-array python-2.x


【解决方案1】:

简单的解决方法

如果您创建np.array(np.array(li))
其中lilistlen(li) &gt; 32,它将按预期返回一个ndarray。

【讨论】:

    【解决方案2】:

    如何保持一维数据,并选择性地重塑以关注给定的维度

    为了说明

    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,则整个数组大小将过大。

    【讨论】:

      【解决方案3】:

      截至 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
      

      【讨论】:

        猜你喜欢
        • 2013-12-24
        • 1970-01-01
        • 1970-01-01
        • 2021-10-15
        • 2016-06-30
        • 2018-07-10
        • 1970-01-01
        • 2018-06-05
        • 1970-01-01
        相关资源
        最近更新 更多