Numpy把数组放到第n维



我经常尝试将一堆数组放在不同的维度,如下所示,

x = x.reshape((x.size, 1, 1))
y = y.reshape((1, y.size, 1))
z = z.reshape((1, 1, z.size))
return x + y + z

我有两个问题,我想这样做,

x = x.todim(0)
y = y.todim(1)
z = z.todim(2)

并实现与上述相同。

另外,我想用不同的运算符做"张量积",并让它被懒惰地评估,因为做我正在做的事情经常会爆炸内存使用。但我做这些事情确实有一个很好的理由……我的疯狂是有道理的。

编辑:

这是我写的代码,但内置的会更好,如果这样存在

def todim(a, ndims, axis=0):
    nshape = [a.shape[i-axis]
              if i >= axis and (i-axis) < len(a.shape)
              else 1
              for i in range(ndims)]
    return a.reshape(tuple(nshape))

首先,您正在做类似于np.ix_的事情。

In [899]: x,y,z=np.ix_(np.arange(3),np.arange(4),np.arange(5))
In [900]: x.shape,y.shape,z.shape
Out[900]: ((3, 1, 1), (1, 4, 1), (1, 1, 5))

numpy.lib.index_tricks.py有这个和其他索引函数和类。

todim这样的函数可以是:

 def todim(x,n,i):
    ind = [1]*n
    ind[i]=x.shape[0]
    return x.reshape(ind)

我并不是想让它成为一个数组方法。独立函数更容易。我还需要定义n,目标维度数。np.ix_是这样做的。


你添加的todim(当我写我的答案时)是相似的,但让x有1d以外的东西。

np.r_接受一个可能允许类似规范的初始字符串实参。

x,y,z = np.r_['0,3,0',np.arange(3)], np.r_['0,3,1',np.arange(4)], np.r_['0,3,2',np.arange(5)]

生成与初始ix_相同的3个数组。它接受字符串输入,但您也可以轻松地插入数字:

np.r_['0,%s,%s'%(3,1), np.arange(4)]

相关内容

  • 没有找到相关文章

最新更新