【问题标题】:How the shape is (3 2 1) | Numpy |形状如何 (3 2 1) |麻木 |
【发布时间】:2021-11-16 08:25:45
【问题描述】:

我正在学习 numpy ,我心中有一个问题无法清楚地想象这个 1 的形状

import numpy as np

a = np.array([ [[1],[56]] , [[8],[98]] ,[[89],[62]] ])
np.shape(a)

输出打印为:(3 ,2 , 1)

如果您能以图表/图像格式表示将不胜感激 1 在输出中的实际含义

【问题讨论】:

  • 您可以将a 转换为 NumPy 并打印出来以获得更好的可视化效果。您的a 有 3 行 [ [...], [...], [...] ],每行有 2 个元素,即每个 [...][ [---], [---] ],现在每个 [---] 有 1 个元素,即每个 [---] -> [*]。这将是您的最终形状数组 (3, 2, 1) -> [ [ [*], [*] ], [ [*], [*] ], [ [*],[*] ] ]

标签: python numpy matrix


【解决方案1】:

基本上,最后一个 1 是因为 a 中的每个数字都有括号。

正式地说,它是“最后”或“最里面”维度的长度。您可以使用前两个维度并像普通矩阵一样排列 a,但请注意每个元素本身都有括号 - 每个元素本身就是一个数组:

[[ [1] [56]]
 [ [8] [98]]
 [[89] [62]]]

如果向每个最内层数组添加一个元素,使第三个shape 数字变大,这就像在 3d 中在最上面的数组后面堆叠更多数组,现在“后面”数组中的对应元素位于与“前”数组相同的最内层数组。

等效地,您可以考虑 back 两个索引来表示常规平面矩阵,而不是考虑 first 两个索引来表示平面矩阵。这就是 numpy 的做法:尝试打印出这样的数组:x = np.random.randint(10, size = (3,3,3))。沿着第一个维度,x[0]x[1]x[2] 依次打印,并且每个单独的格式都像 3x3 矩阵一样。然后第二个索引对应每个单独矩阵的,第三个索引对应。请注意,当您打印 a 时,只显示一列 - 它的第三维大小为 1。您可以使用 x 的定义来查看更多信息(更改 size 参数中的数字)。

以这种方式可视化 3d 数组的一个很好的例子是这张图片,可以在Levi-Civita symbol 的维基百科页面上找到:

不要太担心 Levi-Civita 符号实际上是什么 - 请注意,如果它是一个 numpy 数组,它将具有 (3,3,3) 的形状(如 x我在上面定义)。您使用三个索引来指定每个元素,ijki 告诉你深度(蓝色、红色或绿色),j 告诉你行,k 告诉你列。当 numpy 打印时,它只会依次列出蓝色、红色、绿色。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-13
    • 1970-01-01
    • 1970-01-01
    • 2017-08-21
    • 1970-01-01
    • 1970-01-01
    • 2021-10-12
    相关资源
    最近更新 更多