Numpy将数组放入第N维

时间:2015-08-04 21:32:54

标签: python numpy multidimensional-array

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

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))

1 个答案:

答案 0 :(得分:1)

首先,您正在执行与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)]