从较大的2D阵列中提取每个2D方形子阵列的对角线

时间:2017-09-21 21:55:25

标签: python arrays loops numpy diagonal

这是我的第一个编程课程,我很高兴能够学习Python for Data Science。我无法弄清楚如何编写一个返回矩阵中所有对角线数的循环。以下是代码,我离我有多远或多远?谢谢!

import numpy as np
cols = 0

matrixA = np.array([[2,0,0], [0,3,0], [0,0,4], [6,0,0], [0,7,0], [0,0,8]])

for rows in range(6):
    if rows == cols:
        print(matrixA[rows, cols])
    cols = cols + 1

3 个答案:

答案 0 :(得分:3)

您当前的解决方案不起作用,因为它没有考虑到matrixA不是正方形的事实。您必须注意您的指数不会超出界限。运行它给出:

IndexError: index 3 is out of bounds for axis 1 with size 3

这是因为cols允许2允许的最大值为print(x) array([[2, 0, 0], [0, 3, 0], [0, 0, 4], [6, 0, 0], [0, 7, 0], [0, 0, 8]]) res = np.array([np.diag(x, -offset) for offset in range(0, *x.shape)]) print(res) array([[2, 3, 4], [6, 7, 8]])

作为替代方案,您可以使用np.diag

print(res.ravel())
array([2, 3, 4, 6, 7, 8])

如果您想获得一维结果,请致电np.ravel

<table id="TableName">
<thead></thead>
<tbody>
    <tr id="Row 1">
        <td class="Details column">
        </td>
        <td class="More details column">
        </td>
        <td class="Extra details column">
            <div class="unique_information">
                <div class="print-only">ID # 1234</div>
            </div>
        </td>
        <td class="Numbers column">
            <div class="numbers-data">
                <div>
                    <label class="specific_number">123456</label>
                </div>
            </div>      
        </td>
        <td class="Numbers column">
            <div class="numbers-data">
                <div>
                    <label class="specific_number">345678</label>
                </div>
            </div>      
        </td>   
        <td class="Numbers column">
            <div class="numbers-data">
                <div>
                    <label class="specific_number">234567</label>
                </div>
            </div>
        </td>
    </tr>
</tbody>

答案 1 :(得分:0)

您不需要像numpy那样繁重的库来完成这个简单的任务。在普通的python中,您可以使用zipitertools.cycle(...)作为:

>>> from itertools import cycle

>>> my_list = [[2,0,0], [0,3,0], [0,0,4], [6,0,0], [0,7,0], [0,0,8]]
>>> for i, j in zip(my_list, cycle(range(3))):
...     print(i[j])
...
2
3
4
6
7
8

答案 2 :(得分:0)

为什么要有cols?它总是与行相同,对吧?

for rows in range(6):
    print(matrixA[rows,rows])