我想执行操作如何向量化/与不规则排列numpy的tensorize操作形状
如果有一个规则的形状,然后我可以使用np.einsum,我相信语法将是
np.einsum('ijp,ipk->ijk',X, alpha)
不幸的是,我的数据X有一个非规则的结构(如果我们是零指数)的轴。
为了提供更多的背景知识,指的是第i组第j个成员的第p个特征。由于组的大小不同,实际上,它是不同长度的列表的列表,具有相同长度的列表。
有一个规则的结构,因此可以保存为一个标准的numpy数组(它进入1维然后我使用alpha.reshape(a,b,c)其中a,b,c是问题特定的整数)
我想避免存储X作为列表的列表清单或不同尺寸的np.arrays的列表,并写像
A = []
for i in range(num_groups):
temp = np.empty(group_sizes[i], dtype=float)
for j in range(group_sizes[i]):
temp[i] = np.einsum('p,pk->k',X[i][j], alpha[i,:,:])
A.append(temp)
这是一些不错的功能numpy的/数据结构这样做还是我将不得不妥协与一些仅部分矢量化的实施?
你可以添加一个案例吗? – Divakar
借调;特别是id有兴趣了解涉及不同轴的典型尺寸;以及group_sizes中的整数是如何分布的。偶然,group_sizes是否具有相对较少的独特元素? –
group_sizes在几十到几千之间变化。有82个组。有人建议我可以通过置零来使结构保持正常。这在数学上可以算出来,但是由于最大的团队比最小的团队大得多(〜2个数量级),所以它将包括比必要更多的操作。 – gazza89