我看到了一个python代码,其中可以使用";索引";并且两个python运算符";楼层划分";以及";模量";。
给定下面的(3,3(矩阵。
>>> m = np.array([['0>','1>','2>'],['3>','4>','5>'],['6>','7>','8>']])
>>> m
array([['0>', '1>', '2>'],
['3>', '4>', '5>'],
['6>', '7>', '8>']], dtype='<U2')
如果我们";扁平的";给定的矩阵:
>>> m.reshape(-1)
array(['0>', '1>', '2>', '3>', '4>', '5>', '6>', '7>', '8>'], dtype='<U2')
假设我想读取值"3>"即数组中第4个位置的值。
如果我使用索引3
,我可以从矩阵中获得相应的值,使用:
>>> idx = int(np.where(m.reshape(-1) == '3>')[0])
>>> idx
3
>>> x = idx // m.shape[0]
>>> y = idx % m.shape[0]
>>>
>>> m[x][y]
'3>'
>>>
我看不出这是怎么回事。
对此有何解释?
如果像书一样读取数组(从左到右,从上到下逐行(,那么从开始的每个字符位置(即索引一旦变平(都对应于成形矩阵中的x和y索引,如下所示:
从平面开始的位置:0|1|2|3|4|5|6|7|8|9|10。。。etc
矩阵中的y索引m:0|0|1|1|2|2|3|3。。。etc
矩阵中的x索引m:0|1|2|0|1|2|0。。。etc
因此,一种模式会让自己变得显而易见。反过来考虑你的问题。
给定行和列索引,"book"(即扁平化(索引为i=x+ny,其中n是一行中的元素数,在您的情况下为3。这种普遍模式适用于任何地方。这个等式并不能完全回答你的问题,尽管希望它能提供一些线索。
在上面的3行集合中,我们可以一次构造2行的另外两个方程。
查看id和x,我们可以看到,将id除以一行的元素数量一致地得到x地址作为余数
类似地,观察id和y,我们发现3个元素的值保持不变,以周期性的方式增加1。这就是你得到的,如果你一直拿序列整数相对于3的下限函数(当然这是广义的(
我希望这能回答你的问题。我在Excel中构建棋盘时学会了这个逻辑,并希望根据棋子的"平面索引"存储棋子,但相对于x/y坐标,计算移动可能性要容易得多。把它画出来并标记坐标,使它变得显而易见,这就是我在这里要做的。