Python 从n-d阵列创建二维向量矩阵

Python 从n-d阵列创建二维向量矩阵,python,numpy,Python,Numpy,我有一个由np数组表示的矩阵。这是我所说的一个例子。你可以看到它里面有3个向量 x = np.array([[1, 1], [1,2],[2,3]]) [1,1],[1,2]和[2,3] 目标是将其转化为一个矩阵,在该矩阵中重复这些向量。因此,所述矩阵的第0行应该简单地重复n次[1,1]。第1行应该是重复n次的[1,2]。我相信这看起来有点像n=4 xresult = np.array([[[1, 1], [1, 1], [1, 1], [1, 1]], [[1,

我有一个由np数组表示的矩阵。这是我所说的一个例子。你可以看到它里面有3个向量

x = np.array([[1, 1], [1,2],[2,3]])
[1,1]
[1,2]
[2,3]

目标是将其转化为一个矩阵,在该矩阵中重复这些向量。因此,所述矩阵的第0行应该简单地重复n次
[1,1]
。第1行应该是重复n次的
[1,2]
。我相信这看起来有点像n=4

xresult = np.array([[[1, 1], [1, 1], [1, 1], [1, 1]],
              [[1, 2], [1, 2], [1, 2], [1, 2]], 
              [[2, 3], [2, 3], [2, 3], [2, 3]]])
因此

xresult[0,0] = [1,1]
xresult[0,1] = [1,1]
xresult[0,2] = [1,1]
xresult[1,2] = [1,2]
当然,我们的目标是尽可能不使用循环,因为这是一个明显但可能不那么优雅/高性能的解决方案

以下是一些无效的尝试

np.tile([x],(2,1))
>>>array([[[1, 1],
        [1, 2],
        [2, 3],
        [1, 1],
        [1, 2],
        [2, 3]]])
np.tile([x],(2,))
>>>array([[[1, 1, 1, 1],
        [1, 2, 1, 2],
        [2, 3, 2, 3]]])
np.append(x,x,axis=0)
>>>array([[1, 1],
       [1, 2],
       [2, 3],
       [1, 1],
       [1, 2],
       [2, 3]])
np.append([x],[x],axis=1)
>>>array([[[1, 1],
        [1, 2],
        [2, 3],
        [1, 1],
        [1, 2],
        [2, 3]]])
np.array([[x],[x]])
>>>array([[[[1, 1],
         [1, 2],
         [2, 3]]],


       [[[1, 1],
         [1, 2],
         [2, 3]]]])
(其中一些只是以n=2为目标)

值得注意的是最终目标是获取x和y(一个类似的向量数组,具有相同的维度,但不一定具有相同的向量数)

y = np.array([[99,11], [23,44],[33,44], [2, 1], [9, 9]])
然后在x上运行这个过程,这样结果的列就是y中的向量数。在y上运行一个类似的过程,但按行执行

此转换后的y将具有以下内容

yresult[0,0] = [99,11]
yresult[1,0] = [22,44]
yresult[2,0] = [33,44]
yresult[2,1] = [33,44]
这样我可以减去这两个矩阵,目标是创建一个矩阵,其中x’vector index是行,y’vector index是行,元素是这两个向量之间的差

ultimateResult[0,1]=[1,1]-[23,44]=[-22,-43]

也许有更好的方法。

你看了吗?
x[:,无)。重复(4,1)
添加一个新的中间维度,并在其上复制数组。与
tile
等效的方法是:
np.tile(x[:,无],(1,4,1))
np.stack([x]*4,axis=1)
np.repeat(x[:,np.newaxis,:],4,axis=1)
是一种方法。你需要为它创建一个重复的地方。这两种方法都有效。你能在这里解释冒号和/或/np.newaxis用法的基本原理吗。主要是因为我现在正在尝试整理y的转换。我现在将使用swapaxis可能不是一个太坏的计划