这是我的第一个编程课程,我很高兴能够学习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
答案 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中,您可以使用zip
和itertools.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])