这是什么';数组序列';由numpy&x27创建;Python中的snp.stack函数?

这是什么';数组序列';由numpy&x27创建;Python中的snp.stack函数?,python,arrays,numpy,Python,Arrays,Numpy,我正在阅读np.stack上的: 沿新轴连接一系列阵列。 输出:Ndaray 所以np.stack将接受,比如说,2个numpy数组并返回什么?它将返回一个新数组,其中包含一个,嗯,数组序列 我无法想象由一系列数组组成的数组是什么,所以我来做个小实验怎么样: import numpy as np from random import randint arrays = [2.5 * np.random.randn(1,2)+ 3 for _ in range(1,3)] arrays = [a

我正在阅读np.stack上的:

沿新轴连接一系列阵列。
输出:Ndaray

所以
np.stack
将接受,比如说,2个numpy数组并返回什么?它将返回一个新数组,其中包含一个,嗯,数组序列

我无法想象由一系列数组组成的数组是什么,所以我来做个小实验怎么样:

import numpy as np
from random import randint

arrays = [2.5 * np.random.randn(1,2)+ 3 for _ in range(1,3)] 
arrays = [a.astype(int) for a in arrays]
arrays
这给了我:

[array([[1, 2]]), array([[2, 3]])]
那么

np.stack(数组,轴=0)

给予

假设打印输出基本上不可读(10个方括号,真的吗?),我看到了一个数组中的2个数组,按顺序排列。我想文档是正确的,但是我仍然没有想象这个物体看起来像什么

也许我应该看看尺寸:

np.stack(arrays, axis=0).shape
给予

我们有两行,一列和两层?那不是一个数组吗

我的问题是:

  • “数组序列”到底是什么?数组如何具有顺序的概念,正如序列的定义一样
  • 为什么会有人想要一个“数组序列”,不管它是什么,而不是将多个数组连接成一个(正如
    .shape
    所暗示的那样)
  • 为什么他们称这个函数为“stack”,这个词的通俗用法是如何帮助他们的
谢谢

编辑太多好的答案…无法为复选标记选择一个答案…

Numpy数组:

import numpy
a = np.array([1,2,3])
a.shape gives (3,) -> indicates a 1D array
b = np.array([2, 3, 4])
np.stack((a,b),axis=0) -->Stack the two arrays row-wise which means just put the first arrow on top of the second array
np.stack((a,b),axis=1) -->columns wise stack
现在按同样的顺序回答您的问题:

  • 上述示例中的数组序列是A和b,A和b一起构成数组序列
  • 该函数有用的原因是——想象一下,如果您试图构建一个矩阵,其中每一行(数组)都是从特定于该行号的某个特殊函数中获得的,那么np.stack允许您轻松地堆叠每个数组并创建二维数组
  • 在真正意义上,堆叠意味着把东西放在某物上。在这种情况下,您只需在另一个数组上添加一个数组
  • 希望这有帮助

    编辑-基于评论-

    连接和堆栈之间的差异(功能除外)- Concat更像是merge

    a = np.array([[1, 2], [3, 4]])
    b = np.array([[5, 6]])
    
    np.stack((a,b),axis=0) ->error
    np.concatenate((a,b),axis=0) -->no error 
    
  • 用Python的说法,“序列”只是一个可以包含其他东西的东西,有一种“顺序”的感觉,并且可以选择像
    seq[i]
    这样的索引。Python是duck类型的,因此任何行为类似于序列的东西都可以称为一个序列。例如,它可以是列表或元组。在这种情况下,订购绝对重要

  • 序列可以一块一块地建立,这在编程中很常见。例如,您可以使用RESTful API下载一些数据,从每个响应构建一个数组,并将每个响应追加到列表中。完成请求后,您可以在以后的计算中使用累积的“数组序列”

  • 如果你看一下那页上的例子,就很清楚了。你有一个数组列表,比如说,
    l=[a,b]
    其中
    a
    b
    是数组。如果形状兼容,
    stack(l)
    所做的是在“
    b
    ”之上创建一个新的数组。当然也有
    连接
    ,但它不一样<代码>堆栈创建一个新的维度,但如名称所示,
    串联
    沿指定的轴连接


  • 从发行说明中:

    新函数
    np.stack
    提供了一个通用接口,用于沿新轴连接一系列数组,补充了沿现有轴连接的
    np.concatenate


    我认为您的问题始于
    np.random.randn(1,2)
    可能无法满足您的期望。这将为您提供一个
    (1,2)
    数组

    我认为这是一个嵌套列表。“外部”列表有一个项目,而这个项目是两个项目的“内部”列表(事实上,这正是它在
    array()
    包装器中的表示方式)

    现在,您将列出其中两个阵列。这些括号位于
    数组
    包装器之外,因此它只是一个列表。然后,
    np.stack
    命令根据
    axis
    命令以某种方式移动包装器内的括号。在这种情况下,
    axis=0
    ,0轴中的元素数成为外部列表中的项目数。其他两个维度移过去,
    形状变为
    (2,1,2)

    作为一个列表,这将是一个包含两个项目的列表,每个项目都是一个单一项目的列表,这个单一项目是一个包含两个数字的列表

    除了堆栈
    之外,还有许多不同的方法来排列这些数组。另一个主要的是
    np。concatenate
    ,它将允许您沿着现有轴连接它们(
    axis=0
    将有一个shape
    (2,2)
    ,而
    axis=1
    将有shape
    (1,4)
    堆栈用于您希望新轴连接它们时。

      “数组序列”到底是什么?数组如何具有顺序的概念,正如序列的定义一样?
      • 序列是一种抽象数据类型,正如您直觉所示,它是项的有序集合,可以假设一个序列实现
        \uuu getitem\uuuuuuuu
        \uuuu len\uuuuu
        ,也就是说,它支持括号索引,例如
        seq[0]
        seq[1]
        ,并且具有
        len
        。它还实现了
        \u包含
        \uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
        索引列表
        元组
        str
        字节
        范围
        内存视图
        。A
        numpy.ndarray
        是一个
        import numpy
        a = np.array([1,2,3])
        a.shape gives (3,) -> indicates a 1D array
        b = np.array([2, 3, 4])
        np.stack((a,b),axis=0) -->Stack the two arrays row-wise which means just put the first arrow on top of the second array
        np.stack((a,b),axis=1) -->columns wise stack
        
        a = np.array([[1, 2], [3, 4]])
        b = np.array([[5, 6]])
        
        np.stack((a,b),axis=0) ->error
        np.concatenate((a,b),axis=0) -->no error 
        
        In [1]: import numpy as np
        
        # Ten pieces of 3x4 paper, contained in a list, or "sequence"
        In [2]: arrays = [np.random.randn(3, 4) for _ in xrange(10)]
        
        # Stack the paper so you get a paperstack with thickness 10 ;)
        In [3]: np.stack(arrays, axis=0).shape
        Out[3]: (10, 3, 4)
        
        # Join each piece's long side with the next one, so you get a larger piece of paper
        In [4]: np.concatenate(arrays, axis=0).shape
        Out[4]: (30, 4)
        
        >>> a = np.array([1, 2, 3])
        >>> b = np.array([2, 3, 4])
        >>> np.stack((a, b), axis=0)
        array([[1, 2, 3],
               [2, 3, 4]])
        >>> np.stack((a, b), axis=1)
        array([[1, 2],
               [2, 3],
               [3, 4]])
        >>>
        
        >>> np.concatenate((a,b))
        array([1, 2, 3, 2, 3, 4])
        
        In [325]: arrays = [np.array([[1, 2]]), np.array([[2, 3]])]
        In [326]: arrays
        Out[326]: [array([[1, 2]]), array([[2, 3]])]
        In [327]: arrays[0].shape
        Out[327]: (1, 2)
        In [328]: np.array(arrays)
        Out[328]: 
        array([[[1, 2]],
        
               [[2, 3]]])
        In [329]: _.shape
        Out[329]: (2, 1, 2)
        
        np.array([[[1, 2]],[[2, 3]]])
        
        In [332]: np.stack(arrays).shape
        Out[332]: (2, 1, 2)
        
        In [335]: np.stack(arrays, axis=0).shape
        Out[335]: (2', 1, 2)
        In [336]: np.stack(arrays, axis=1).shape
        Out[336]: (1, 2', 2)
        In [337]: np.stack(arrays, axis=2).shape
        Out[337]: (1, 2, 2')