numpy ndarray有32个维度

时间:2016-09-05 07:46:14

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

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

这可能有解决方法吗?

3 个答案:

答案 0 :(得分:2)

简单的解决方法

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

答案 1 :(得分:1)

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

说明

needthispath/somepath

完全重塑

    public Point() : this(0, 0) { } //Default-constructor.

    public Point(int X, int Y) //Constructor.
    {
        //this.X = X;
        //this.Y = Y;
        setx(X);
        //this.y = Y;
    }

    public int X //Property for the X-coordinate.
    {
        get { return x; }
        private set
        {
            x = value;
        }

    }

    public int Y //Property for the Y-coordinate.
    {
        get { return y; }
    }

    public int setx(int Xvalue)
    {
        return x = Xvalue;
    }
}

使用部分重塑 - 相同的数字,不同的结果形状

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

我不打算在接近32维以上的任何事情上进行测试。正如评论中所指出的,如果许多维度都大于1,那么整个数组的大小将会过大。

答案 2 :(得分:0)

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