我有一个产生数据趋势的过程的输出,如下所示:
数据输出似乎与对角线有关,但我不确定如何跟踪它。最终,我知道每16个数字样本中的前15个数字,并且想要预测第16个数字。看起来您应该能够通过某种类型的近似来实现这一点,这种近似涉及矩阵数学或傅立叶级数中可能的相移。有没有一种方法可以达到这个目的?如果有一个可以通过Python使用的解决方案,那将是首选。
答案 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的新手,所以我很确定必须有更快更优雅的解决方案