Python 中向量的大小是 (N,1) 而不是 (N,)

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

在Python中,我正在编写一段代码,在某些时候需要一个矩阵(可能是一个向量)X并考虑它的维度,因为我想将每个维度分别存储在变量$m$和$n$中。如果矩阵 $X$ 是大小为 $N imes 1$ 的向量,则

np.shape(X)
将作为输出
(N,)
返回。但是,此信息没有帮助,因为当我将信息存储为
m,n = np.shape(X)
时,我会遇到错误

ValueError: not enough values to unpack (expected 2, got 1)

有人知道如何解决这个问题吗?理想情况下,我想存储 $m = N, n = 1$,但我不知道如何实现这一点。我考虑过对我的向量进行重塑,例如

X = np.reshape(X, (np.shape(X)[0], 1))
,但这可能会在继续编写代码时导致进一步的问题。对此有何建议?感谢您的帮助!

python numpy
1个回答
0
投票

当 NumPy 返回包含一维数组或向量的单个元素的元组时,它以

(5,)
格式表示,而不是通常的
(5)
格式。这样做是为了在 Python 中明确识别元组。

NumPy 始终返回一个元组以保持输出一致性,即使它是一维数组也是如此。为了表示具有单个元素(例如数字 5)的元组,它会附加一个逗号来指示它是一个元组,而不仅仅是一个没有括号的值。

np.shape(X)
返回一维数组的单元素元组时,就会出现问题。尝试解包(例如
m, n = np.shape(X)
)会触发错误,因为 Python 需要两个值来解包,但只收到一个值,从而导致“没有足够的值来解包”错误。

为了避免此问题,可以利用

np.shape(X)
方法来确定数组维度中的元素数量,并根据需要添加必要的维度。

这是解决此问题的示例函数:

def dim(matrix, required_dims=2):
    shape = np.shape(matrix)
    if len(shape) < required_dims:
        shape += (1,) * (required_dims - len(shape))
    return shape

此函数有效地将所需的维数添加到基于

shape
的元组中,即使对于一维数组也能确保正确的维数。
使用示例:

required_dims

如果需要,您可以删除此函数中的条件 
matrix = np.array([1, 2, 3, 4, 5]) result = dim(matrix, required_dims=3) print(result) # Output: (5, 1, 1)

语句:

if

如果你只需要处理向量,可以使用这个函数:

def dim(matrix, required_dims=2): shape = np.shape(matrix) shape += (1,) * (required_dims - len(shape)) return shape

此函数返回非向量矩阵的未更改维度,并添加描述第二个单位的附加维度,否则。

© www.soinside.com 2019 - 2024. All rights reserved.