具有超过 32 个维度的 numpy ndarray

新手上路,请多包涵

当我尝试创建一个超过 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 乘法(在检查轴是否相同之后)。

有没有可能的解决方法?

原文由 Ankur Ankan 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.7k
2 个回答

如何在 1d 中维护数据,并有选择地重塑以专注于给定维度

为了显示

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

原文由 hpaulj 发布,翻译遵循 CC BY-SA 3.0 许可协议

简单的解决方法

如果你创建一个 np.array(np.array(li))

其中 lilistlen(li) > 32 ,它将按预期返回一个 ndarray。

原文由 FMAPR 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题