从更大的二维数组中提取每个二维方形子数组的对角线
Extract diagonals of each 2D square sub-array from a larger 2D array
这是我的第一个编程 class,我很高兴学习 Python 数据科学。我不知道如何编写一个 returns 矩阵中所有对角线数字的循环。下面是代码,我有多近或多远?谢谢!
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
你不需要像 numpy
to achieve this simple task. In plain python you can do it via using zip
and 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
为什么要有 cols?它总是与行相同,对吗?
for rows in range(6):
print(matrixA[rows,rows])
您当前的解决方案不起作用,因为它没有考虑到 matrixA
不是正方形这一事实。您必须注意您的索引不会 运行 超出范围。 运行 它给出:
IndexError: index 3 is out of bounds for axis 1 with size 3
这是因为cols
这里允许取的最大值是2
.
作为替代方案,您可以使用 np.diag
:
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.ravel
:
print(res.ravel())
array([2, 3, 4, 6, 7, 8])
这是我的第一个编程 class,我很高兴学习 Python 数据科学。我不知道如何编写一个 returns 矩阵中所有对角线数字的循环。下面是代码,我有多近或多远?谢谢!
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
你不需要像 numpy
to achieve this simple task. In plain python you can do it via using zip
and 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
为什么要有 cols?它总是与行相同,对吗?
for rows in range(6):
print(matrixA[rows,rows])
您当前的解决方案不起作用,因为它没有考虑到 matrixA
不是正方形这一事实。您必须注意您的索引不会 运行 超出范围。 运行 它给出:
IndexError: index 3 is out of bounds for axis 1 with size 3
这是因为cols
这里允许取的最大值是2
.
作为替代方案,您可以使用 np.diag
:
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.ravel
:
print(res.ravel())
array([2, 3, 4, 6, 7, 8])