numpy中的数组连接算法

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]开始,然后将其重塑

我是numpy新手,我了解以较低的形状(n1,n2)连接阵列的方法,因为我们可以像矩阵一样可视化

但是我不理解更高维度的逻辑(n0,…,n_{d-1}),当然我无法想象。为了可视化,我通常将一个多维数组想象成一棵树,所以(n0,…,n{d-1})意味着在树的级别(轴)I,每个节点都有n{I}个子节点。所以在0级(根),我们有n0子级,以此类推

实质上,“连接数组”算法的形式确切定义是什么


让我们看看,我可以演示一些基本的数组操作

首先制作一个二维数组。从一个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]]])