我不了解bulit-in函数(形状)

问题描述 投票:0回答:2

我想知道x.shape [0]是数组的行还是列。

我已编码...

x=np.array([1,2,3,4])
y=np.array([[1,2,3],[4,5,6]])
print(x.shape)
print(y.shape)

(4,) (2,3)

在x.shape中,索引0处的元素是数组x的列。在y.shape中,索引为0的元素是数组y的行。

我不知道形状函数如何返回其输出。请帮助:)

ps.s。我也不明白为什么x.shape返回(4,)。为什么不(4)?

python arrays numpy
2个回答
0
投票

考虑以行和列的形式出现的NumPy数组的形状会很快使您失望,如果您开始处理更复杂的数据。

NumPy数组实际上是多维tensors。张量可以具有任意数量的尺寸。实际上,向量和矩阵分别只是一维和二维张量。

数组的形状返回张量每个维度的大小。让我们从一个简单的向量开始:

x = np.array([1, 2, 3])

在此变量上调用.shape将返回(3,),因为该数组是一维张量,其第一维包含3个元素。逗号只是Python约定,用于指示括号表示Python Tuple。

现在让我们尝试一个矩阵:

m = np.array([
    [1, 2, 3],
    [4, 5, 6]
])

运行m.shape现在得到(2, 3),因为张量的第一维包含2个向量,而第二维(向量本身)每个都包含3个元素。

最后,让我们尝试一个3-D张量:

t = np.array([
    [
        [1, 2, 3],
        [4, 5, 6]
    ],
    [
        [7, 8, 9],
        [0, 1, 2]
    ]
])

t.shape将返回(2, 2, 3),这意味着数组的第一个维度包含两个元素(在这种情况下为两个矩阵),第二个维度(这些矩阵由两个维组成)分别包含两个向量,第三个维度(向量)每个都包含三个元素。


0
投票

我不明白为什么x.shape返回(4,)。为什么不(4)?

shape数组维数的元组] >>,对于一维数组,它是具有单个元素的tuple。由于它始终是元组,因此您可以通过执行以下操作轻松找到具有数组x的维数:

len(x.shape)

请注意,如果x.shape(4),因为len((4))会导致错误,而len((4,))1,则这将是不可能的。关于二维数组,例如:

y=np.array([[1,2,3],[4,5,6]])

形状是(number_of_rows,number_of_columns),知道y.shape(2, 3)时,您可以推断出以下代码将起作用:

y[0][0]  # 0 < 2 and 0 < 3
y[0][1]  # 0 < 2 and 1 < 3
y[0][2]  # 0 < 2 and 2 < 3
y[1][0]  # 1 < 2 and 0 < 3
y[1][1]  # 1 < 2 and 1 < 3
y[1][2]  # 1 < 2 and 2 < 3

[下面(仅举几个例子),将产生IndexError

y[2][0]  # as 2 < 2 and 0 < 3 is False
y[0][3]  # as 0 < 2 and 3 < 3 is False
y[2][3]  # as 2 < 2 and 3 < 3 is False
    
© www.soinside.com 2019 - 2024. All rights reserved.