Skip to main content
 首页 » 编程设计

python之遍历 NumPy 矩阵列表

2025年05月04日1598°冷暖

我有一个包含行矩阵的列表:

rows = [ matrix([[1, 0, 0]]), matrix([[0, 1, 0]]), matrix([[0, 0, 1]]) ] 

并且我尝试使用 for (a, b, c) in rows: 遍历这些,但是我没有这样做,而是收到了一个错误:

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

The expected behaviour would be to unpack the three elements in the row to a, b, c:

for (a, b, c) in rows: 
    print(f"{a} {b} {c}") 
> 1 0 0 
> 0 1 0 
> 0 0 1 

不幸的是,这适用于 [1, 0, 0],但不适用于 [[1, 0, 0]]。

我意识到这是因为它们是[[doubly packed]],但我想知道是否有解决此问题的简单方法?

请您参考如下方法:

因为,我们使用 a,b,c 从每个矩阵的第一行提取元素,似乎我们保证每行有 3 个元素,并且每行一个那些矩阵。因此,一个简单的解决方案(如所要求的那样)是在使用循环时使用数组构造函数并挤出单例嵌套级别,就像这样 -

for a,b,c in np.array(rows)[:,0]: 

或者更简单的np.squeeze() -

for a,b,c in np.squeeze(rows): 

请注意,这不是内存效率最高的方法,而是一种提取所需标量值的简单方法。

这是一个示例运行 -

In [375]: for a,b,c in np.squeeze(rows): 
     ...:     print(a,b,c) 
     ...:      
(1, 0, 0) 
(0, 1, 0) 
(0, 0, 1)