numpy中的数组连接算法
我是numpy新手,我了解以较低的形状(n1,n2)连接阵列的方法,因为我们可以像矩阵一样可视化 但是我不理解更高维度的逻辑(n0,…,n_{d-1}),当然我无法想象。为了可视化,我通常将一个多维数组想象成一棵树,所以(n0,…,n{d-1})意味着在树的级别(轴)I,每个节点都有n{I}个子节点。所以在0级(根),我们有n0子级,以此类推 实质上,“连接数组”算法的形式确切定义是什么numpy中的数组连接算法,numpy,numpy-ndarray,Numpy,Numpy Ndarray,我是numpy新手,我了解以较低的形状(n1,n2)连接阵列的方法,因为我们可以像矩阵一样可视化 但是我不理解更高维度的逻辑(n0,…,n_{d-1}),当然我无法想象。为了可视化,我通常将一个多维数组想象成一棵树,所以(n0,…,n{d-1})意味着在树的级别(轴)I,每个节点都有n{I}个子节点。所以在0级(根),我们有n0子级,以此类推 实质上,“连接数组”算法的形式确切定义是什么 让我们看看,我可以演示一些基本的数组操作 首先制作一个二维数组。从一个1d[0,1,…5]开始,然后将其重塑
让我们看看,我可以演示一些基本的数组操作 首先制作一个二维数组。从一个1d[0,1,…5]开始,然后将其重塑为(2,3): 我可以沿着第一个维度加入两份
x
(vstack
,垂直方向的v也可以这样做):
注意,结果是(4,3);没有新的维度
或者“水平”加入他们:
In [4]: np.concatenate([x,x], axis=1)
Out[4]:
array([[0, 1, 2, 0, 1, 2], # (2,6) shape
[3, 4, 5, 3, 4, 5]])
但如果我将它们提供给np.array
我会制作一个3d数组(2,2,3)形状:
np.array
的这个动作实际上与从嵌套列表中生成2d数组没有什么不同,np.array([[1,2],[3,4]])
。我们可以只添加一层嵌套,就像没有换行符的Out[5}。我倾向于认为这个3d数组有2个块,每个块有2行3列。但是名称只是为了方便
stack
的作用类似于np.array
,形成一个3d数组。它实际上将输入数组更改为(1,2,3)形状,并在第一个轴上连接
In [6]: np.stack([x,x])
Out[6]:
array([[[0, 1, 2],
[3, 4, 5]],
[[0, 1, 2],
[3, 4, 5]]])
stack
允许我们以其他方式加入阵列
In [7]: np.stack([x,x], axis=1) # expand to (2,1,3) and concatante
Out[7]:
array([[[0, 1, 2],
[0, 1, 2]],
[[3, 4, 5],
[3, 4, 5]]])
In [8]: np.stack([x,x], axis=2) # expand to (2,3,1) and concatenate
Out[8]:
array([[[0, 0],
[1, 1],
[2, 2]],
[[3, 3],
[4, 4],
[5, 5]]])
串联
和其他堆栈
函数不向基本numpy数组添加任何新内容。它们只是提供了一种从现有数组生成新数组的方法。没有任何特殊的算法
如果有帮助,您可以将这些连接函数想象为创建一个新的“空白”数组,并用源数组的副本填充它。例如,最后一个堆栈
可以通过以下方法完成:
In [9]: res = np.zeros((2,3,2), int)
In [10]: res
Out[10]:
array([[[0, 0],
[0, 0],
[0, 0]],
[[0, 0],
[0, 0],
[0, 0]]])
In [11]: res[:,:,0] = x
In [12]: res[:,:,1] = x
In [13]: res
Out[13]:
array([[[0, 0],
[1, 1],
[2, 2]],
[[3, 3],
[4, 4],
[5, 5]]])
“连接数组”的参考是什么?这不是numpy
文档所说的。我指的是:好的,这澄清了你的问题。基本操作是concatenate
,它从数组列表中创建一个新数组。它不会更改维度的数量。其他函数会调整va中的维度调用concatenate
之前,如果您首先了解多维数组的基本知识,可能会有所帮助。连接函数不会创建任何新的或不同的内容。在低维情况下,1D、2D、3D是清晰的,但在更高维情况下,如何解释或可视化连接?
In [6]: np.stack([x,x])
Out[6]:
array([[[0, 1, 2],
[3, 4, 5]],
[[0, 1, 2],
[3, 4, 5]]])
In [7]: np.stack([x,x], axis=1) # expand to (2,1,3) and concatante
Out[7]:
array([[[0, 1, 2],
[0, 1, 2]],
[[3, 4, 5],
[3, 4, 5]]])
In [8]: np.stack([x,x], axis=2) # expand to (2,3,1) and concatenate
Out[8]:
array([[[0, 0],
[1, 1],
[2, 2]],
[[3, 3],
[4, 4],
[5, 5]]])
In [9]: res = np.zeros((2,3,2), int)
In [10]: res
Out[10]:
array([[[0, 0],
[0, 0],
[0, 0]],
[[0, 0],
[0, 0],
[0, 0]]])
In [11]: res[:,:,0] = x
In [12]: res[:,:,1] = x
In [13]: res
Out[13]:
array([[[0, 0],
[1, 1],
[2, 2]],
[[3, 3],
[4, 4],
[5, 5]]])