检测矩阵中的对角线

时间:2016-06-05 18:24:16

标签: python numpy scipy sparse-matrix prediction

我有一个产生数据趋势的过程的输出,如下所示:

数据输出似乎与对角线有关,但我不确定如何跟踪它。最终,我知道每16个数字样本中的前15个数字,并且想要预测第16个数字。看起来您应该能够通过某种类型的近似来实现这一点,这种近似涉及矩阵数学或傅立叶级数中可能的相移。有没有一种方法可以达到这个目的?如果有一个可以通过Python使用的解决方案,那将是首选。

1 个答案:

答案 0 :(得分:1)

以下是如何检查对角线是否仅包含1的示例,如您所示:

In [52]: from scipy.sparse import eye

让我们创建一个对角线

的矩阵
In [53]: a = np.fliplr(eye(5, 8, k=1).toarray())

In [54]: a
Out[54]:
array([[ 0.,  0.,  0.,  0.,  0.,  0.,  1.,  0.],
       [ 0.,  0.,  0.,  0.,  0.,  1.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  1.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  1.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  1.,  0.,  0.,  0.,  0.,  0.]])

向左/向右翻转阵列

In [55]: f = np.fliplr(a)

In [56]: f
Out[56]:
array([[ 0.,  1.,  0.,  0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  1.,  0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  1.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  1.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.,  1.,  0.,  0.]])

同样可以做到:

In [71]: a[::-1,:]
Out[71]:
array([[ 0.,  0.,  1.,  0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  1.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  1.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.,  1.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.,  0.,  1.,  0.]])

得到对角线

In [57]: np.diag(f, k=1)
Out[57]: array([ 1.,  1.,  1.,  1.,  1.])

In [58]: np.diag(f, k=-1)
Out[58]: array([ 0.,  0.,  0.,  0.])

In [111]: a[::-1].diagonal(2)
Out[111]: array([ 1.,  1.,  1.,  1.,  1.])

检查整个对角线是否包含1 s

In [61]: np.all(np.diag(f, k=1) == 1)
Out[61]: True

In [64]: (np.diag(f, k=1) == 1).all()
Out[64]: True

In [65]: (np.diag(f, k=0) == 1).all()
Out[65]: False

This answer将帮助您找到所有对角线

PS我是numpy的新手,所以我很确定必须有更快更优雅的解决方案