numpy ndarray 形状有什么作用?
what does numpy ndarray shape do?
我有一个关于 .shape 函数的简单问题,这让我很困惑。
a = np.array([1, 2, 3]) # Create a rank 1 array
print(type(a)) # Prints "<class 'numpy.ndarray'>"
print(a.shape) # Prints "(3,)"
b = np.array([[1,2,3],[4,5,6]]) # Create a rank 2 array
print(b.shape) # Prints "(2, 3)"
.shape 到底做了什么?计算多少行,多少列,
那么a.shape应该是,(1,3),一行三列,对吧?
yourarray.shape
or np.shape()
or np.ma.shape()
returns the shape of your ndarray as a tuple; And you can get the (number of) dimensions of your array using yourarray.ndim
或 np.ndim()
。 (即它给出 ndarray
的 n
因为 NumPy 中的所有数组都只是 n 维数组(简称为 ndarray
s))
对于 1D 数组,形状为 (n,)
,其中 n
是数组中元素的数量。
对于 2D 数组,形状为 (n,m)
其中 n
是行数,m
是行数数组中的列。
请注意,在 1D 的情况下,形状将只是 (n, )
而不是您所说的 (1, n)
或 (n, 1)
分别用于行向量和列向量。
这是遵循以下约定:
对于一维数组,return 一个 形状元组 只有 1 个元素(即 (n,)
)
对于二维数组,return 一个 形状元组 只有 2 个元素(即 (n,m)
)
对于 3D 数组,return 一个 形状元组 只有 3 个元素(即 (n,m,k)
)
对于 4D 数组,return 一个 形状元组 只有 4 个元素(即 (n,m,k,j)
)
等等。
此外,请参阅下面的示例,了解 np.shape()
or np.ma.shape()
如何处理 1D 数组和标量:
# sample array
In [10]: u = np.arange(10)
# get its shape
In [11]: np.shape(u) # u.shape
Out[11]: (10,)
# get array dimension using `np.ndim`
In [12]: np.ndim(u)
Out[12]: 1
In [13]: np.shape(np.mean(u))
Out[13]: () # empty tuple (to indicate that a scalar is a 0D array).
# check using `numpy.ndim`
In [14]: np.ndim(np.mean(u))
Out[14]: 0
P.S.:因此,形状元组 一致我们对 space 维度的理解,至少在数学上是这样。
与其最受欢迎的商业竞争对手不同,numpy 从一开始就几乎是关于 "arbitrary-dimensional" 数组的,这就是核心 class 被称为 ndarray
的原因。您可以使用 .ndim
属性 检查 numpy 数组的维数。 .shape
属性 是一个长度为 .ndim
的元组,其中包含每个维度的长度。目前,numpy 最多可以处理 32 个维度:
a = np.ones(32*(1,))
a
# array([[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[ 1.]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]])
a.shape
# (1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
a.ndim
# 32
如果一个 numpy 数组恰好像你的第二个例子一样是二维的,那么从行和列的角度来考虑它是合适的。但是 numpy 中的一维数组是真正的一维数组,没有行或列。
如果您想要行向量或列向量之类的东西,您可以通过创建一个维度等于 1 的二维数组来实现。
a = np.array([[1,2,3]]) # a 'row vector'
b = np.array([[1],[2],[3]]) # a 'column vector'
# or if you don't want to type so many brackets:
b = np.array([[1,2,3]]).T
.shape() 根据其中的元素数量给出数组的实际形状,即 rows/No 的列数。
你得到的答案是元组的形式。
例如:
一维数组:
d=np.array([1,2,3,4])
print(d)
(1,)
输出:(4,)
即数字4表示一维数组中元素的数量。
二维数组:
e=np.array([[1,2,3],[4,5,6]])
print(e)
(2,3)
输出:(2,3)即行数和列数。
最终输出中的元素数量将取决于数组中的行数....它会逐渐增加。
array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
我有一个关于 .shape 函数的简单问题,这让我很困惑。
a = np.array([1, 2, 3]) # Create a rank 1 array
print(type(a)) # Prints "<class 'numpy.ndarray'>"
print(a.shape) # Prints "(3,)"
b = np.array([[1,2,3],[4,5,6]]) # Create a rank 2 array
print(b.shape) # Prints "(2, 3)"
.shape 到底做了什么?计算多少行,多少列, 那么a.shape应该是,(1,3),一行三列,对吧?
yourarray.shape
or np.shape()
or np.ma.shape()
returns the shape of your ndarray as a tuple; And you can get the (number of) dimensions of your array using yourarray.ndim
或 np.ndim()
。 (即它给出 ndarray
的 n
因为 NumPy 中的所有数组都只是 n 维数组(简称为 ndarray
s))
对于 1D 数组,形状为 (n,)
,其中 n
是数组中元素的数量。
对于 2D 数组,形状为 (n,m)
其中 n
是行数,m
是行数数组中的列。
请注意,在 1D 的情况下,形状将只是 (n, )
而不是您所说的 (1, n)
或 (n, 1)
分别用于行向量和列向量。
这是遵循以下约定:
对于一维数组,return 一个 形状元组 只有 1 个元素(即 (n,)
)
对于二维数组,return 一个 形状元组 只有 2 个元素(即 (n,m)
)
对于 3D 数组,return 一个 形状元组 只有 3 个元素(即 (n,m,k)
)
对于 4D 数组,return 一个 形状元组 只有 4 个元素(即 (n,m,k,j)
)
等等。
此外,请参阅下面的示例,了解 np.shape()
or np.ma.shape()
如何处理 1D 数组和标量:
# sample array
In [10]: u = np.arange(10)
# get its shape
In [11]: np.shape(u) # u.shape
Out[11]: (10,)
# get array dimension using `np.ndim`
In [12]: np.ndim(u)
Out[12]: 1
In [13]: np.shape(np.mean(u))
Out[13]: () # empty tuple (to indicate that a scalar is a 0D array).
# check using `numpy.ndim`
In [14]: np.ndim(np.mean(u))
Out[14]: 0
P.S.:因此,形状元组 一致我们对 space 维度的理解,至少在数学上是这样。
与其最受欢迎的商业竞争对手不同,numpy 从一开始就几乎是关于 "arbitrary-dimensional" 数组的,这就是核心 class 被称为 ndarray
的原因。您可以使用 .ndim
属性 检查 numpy 数组的维数。 .shape
属性 是一个长度为 .ndim
的元组,其中包含每个维度的长度。目前,numpy 最多可以处理 32 个维度:
a = np.ones(32*(1,))
a
# array([[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[ 1.]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]])
a.shape
# (1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
a.ndim
# 32
如果一个 numpy 数组恰好像你的第二个例子一样是二维的,那么从行和列的角度来考虑它是合适的。但是 numpy 中的一维数组是真正的一维数组,没有行或列。
如果您想要行向量或列向量之类的东西,您可以通过创建一个维度等于 1 的二维数组来实现。
a = np.array([[1,2,3]]) # a 'row vector'
b = np.array([[1],[2],[3]]) # a 'column vector'
# or if you don't want to type so many brackets:
b = np.array([[1,2,3]]).T
.shape() 根据其中的元素数量给出数组的实际形状,即 rows/No 的列数。 你得到的答案是元组的形式。
例如: 一维数组:
d=np.array([1,2,3,4])
print(d)
(1,)
输出:(4,) 即数字4表示一维数组中元素的数量。
二维数组:
e=np.array([[1,2,3],[4,5,6]])
print(e)
(2,3)
输出:(2,3)即行数和列数。
最终输出中的元素数量将取决于数组中的行数....它会逐渐增加。
array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])