在numpy中用零填充数组

6
h = numpy.zeros((2,2,2)) 

最后的2代表什么?它是在创建多维数组还是其他东西?

输出:

array([[[ 0.,  0.],
    [ 0.,  0.]],
   [[ 0.,  0.],
    [ 0.,  0.]]])

如果要创建多个副本,那么当我执行以下操作时会发生什么?
h = numpy.zeros((2,2,1))

输出:

array([[[ 0.],
    [ 0.]],
   [[ 0.],
    [ 0.]]])

我知道它被零填充,前两个值指定了行和列,第三个值呢?谢谢。我试过用Google搜索,但是我无法表达我的问题。


http://docs.scipy.org/doc/numpy/reference/generated/numpy.zeros.html - devnull
你的形状有三个维度,因此你有一个三维数组。哪一部分不清楚? - Wooble
为什么我的第一个问题在这个网站上会被踩。至于链接,它没有指明任何有关第三方的事情。 - hlkstuv_23900
4个回答

12
通过提供三个参数,您可以创建一个三维数组:

numpy.array((2,2,2)) 会生成一个大小为 2x2x2 的数组:
  0---0
 /   /|
0---0 0
|   |/
0---0

numpy.array((2,2,1)) 的结果是一个大小为 2x2x1 的数组:

0---0
|   |
0---0

numpy.array((2,1,2)) 的结果是一个大小为 2x2x1 的数组:

  0---0
 /   /
0---0

numpy.array((1,2,2))的结果是一个大小为2x2x1的数组:

  0
 /|
0 0
|/
0

在这些表示中,矩阵“可能看起来像numpy.array((2,2))”(一个2x2数组),但其基础结构仍然是三维的。


这些括号真的很令人困惑,希望它们可以打印成一个三维矩阵。再次感谢。 - hlkstuv_23900
希望我能给这个+2,因为这让那些只看过二维矩阵并不了解更高维度(张量等)的人们非常清晰地理解(2,2,1)与(2,1,2)与(1,2,2)之间的区别。 - usethedeathstar
我并不是没有见过3D矩阵。我没有使用过numpy,也不熟悉打印输出。而且,根据@Nils Werner提供的可视化呈现,(2,1,2)和(2,2,1)之间的差异非常明显。然而,我想知道这三种不同形状的(2,1,2)和(2,2,1)类型的应用。 - hlkstuv_23900

3
(4,3,2)读作:有一栋楼房,共有4层楼,每层楼有3行2列的房间。因此它是一个三维数组。
In [4]: np.zeros((4, 3, 2))                                                                      
Out[4]: 
array([[[ 0.,  0.],                                                                              
        [ 0.,  0.],                                                                              
        [ 0.,  0.]],                                                                             

       [[ 0.,  0.],                                                                              
        [ 0.,  0.],                                                                              
        [ 0.,  0.]],                                                                             

       [[ 0.,  0.],                                                                              
        [ 0.,  0.],                                                                              
        [ 0.,  0.]],                                                                             

       [[ 0.,  0.],                                                                              
        [ 0.,  0.],                                                                              
        [ 0.,  0.]]])      

1
该参数指定了数组的形状
In [72]: import numpy as np

In [73]: h = np.zeros((2,2,2))

In [74]: h.shape
Out[74]: (2, 2, 2)

In [75]: h = np.zeros((2,2,1))

In [76]: h.shape
Out[76]: (2, 2, 1)

如果一个数组的形状为(a,b,c),那么在NumPy中它有3个“轴”(或者在普通英语中称为3个“维度”)。 轴0具有长度a,轴1具有长度b,轴2具有长度c
当你定义 h = np.zeros((2,2,1)) 时,请注意结果有三层方括号:
In [77]: h
Out[77]: 
array([[[ 0.],
        [ 0.]],

       [[ 0.],
        [ 0.]]])

外层括号包含2个项目,中间的括号也每个包含2个项目。最内层括号仅包含单个项目。因此,形状为(2,2,1)。

感谢大家提供的可视化,让我无法想象的东西变得清晰明了。 - hlkstuv_23900

0

最后一位数字总是表示元素个数。所有其他数字都是数组或列表。 因此,(3, 4, 3) 表示我需要一个列表,其中包含 3 个数组,每个数组都包含 4 个数组,每个数组都包含 3 个 元素

{ [[0,0,0,], [0,0,0], [0,0,0], [0,0,0]],
[[0,0,0], [0,0,0], [0,0,0], [0,0,0]],
[[0,0,0], [0,0,0], [0,0,0], [0,0,0]] }

2, 2, 1 表示,列表中有 2 个数组,每个数组包含 2 个数组,每个数组只包含 1 个 元素

{ [[0], [0}],
[[0], [0]] }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接