Python 从n-d阵列创建二维向量矩阵
我有一个由np数组表示的矩阵。这是我所说的一个例子。你可以看到它里面有3个向量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,
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可能不是一个太坏的计划