当我尝试创建一个超过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乘法(在检查轴是否相同之后)。
这可能有解决方法吗?
答案 0 :(得分:2)
简单的解决方法
如果您创建一个 np.array(np.array(li))
其中 li
是 list
和 len(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