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



数据输出似乎具有对角线趋势,但是我不确定如何跟踪它。最终,我知道每个16个数字样本中的前15个数字,并希望预测第16个数字。似乎您应该能够使用某种涉及矩阵数学或傅立叶级数中可能的相移的近似方法来执行此操作。有没有一种方法可以做到这一点?如果有可以通过Python使用的解决方案,那将是首选。

最佳答案

这是一个如何检查对角线是否仅包含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

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将帮助您找到所有对角线

附言:我是numpy的新手,因此,我敢肯定,肯定会有更快,更优雅的解决方案

关于python - 检测矩阵中的对角线,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37645312/

10-12 18:27