Python 在for循环';s变量
我的矩阵是一个具有二进制值的8x8矩阵。我想过滤掉M的上三角矩阵对角线上连续三个1的模式,即(111)。我已经用for和while循环编写了一段python代码,但它不起作用,我无法找出那里发生了什么。请帮忙Python 在for循环';s变量,python,loops,for-loop,matrix,while-loop,Python,Loops,For Loop,Matrix,While Loop,我的矩阵是一个具有二进制值的8x8矩阵。我想过滤掉M的上三角矩阵对角线上连续三个1的模式,即(111)。我已经用for和while循环编写了一段python代码,但它不起作用,我无法找出那里发生了什么。请帮忙 rf =([1,0,1,0,1,0,0,0], [1,0,1,0,1,0,0,0], [1,0,1,0,1,0,0,0], [1,0,1,0,1,0,0,0], [1,0,1,0,1,0,0,0], [1,0,1,0,1,0,0,0],
rf =([1,0,1,0,1,0,0,0],
[1,0,1,0,1,0,0,0],
[1,0,1,0,1,0,0,0],
[1,0,1,0,1,0,0,0],
[1,0,1,0,1,0,0,0],
[1,0,1,0,1,0,0,0],
[1,0,1,0,1,0,0,0],
[1,0,1,0,1,0,0,0])
for i in range(1):
for j in range(len (rf)-3):
while (i<len(rf)-3 and j<len(rf)-3):
count =0
if rf[i,j]==True:
for w in range(3):
if rf[i+w,j+w]==True:
count +=1
print count
if count==3:
i=i+3
j=j+3
else:
rf[i,j]=False
i=i+1
j=j+1
rf=([1,0,1,0,1,0,0],
[1,0,1,0,1,0,0,0],
[1,0,1,0,1,0,0,0],
[1,0,1,0,1,0,0,0],
[1,0,1,0,1,0,0,0],
[1,0,1,0,1,0,0,0],
[1,0,1,0,1,0,0,0],
[1,0,1,0,1,0,0,0])
对于范围(1)中的i:
对于范围内的j(透镜(rf)-3):
而(i您可以使用numpy
访问对角线来简化代码:
>>> import numpy as np
>>> rf = [[1,0,1,0,1,0,0,0]] * 8
>>> m = np.array(rf)
>>> m.diagonal(0)
array([1, 0, 1, 0, 1, 0, 0, 0])
>>> m.diagonal(1)
array([0, 1, 0, 1, 0, 0, 0])
查找连续位置的简单例程:
def consecutive_values(arr, val=1, cnt=3):
def comparator(pos):
return arr[pos] == val
if len < cnt:
return []
else:
return [p for p, x in enumerate(arr[:1-cnt])
if all(map(comparator, xrange(p, p+cnt, 1)))]
您可以使用numpy
访问对角线来简化代码:
>>> import numpy as np
>>> rf = [[1,0,1,0,1,0,0,0]] * 8
>>> m = np.array(rf)
>>> m.diagonal(0)
array([1, 0, 1, 0, 1, 0, 0, 0])
>>> m.diagonal(1)
array([0, 1, 0, 1, 0, 0, 0])
查找连续位置的简单例程:
def consecutive_values(arr, val=1, cnt=3):
def comparator(pos):
return arr[pos] == val
if len < cnt:
return []
else:
return [p for p, x in enumerate(arr[:1-cnt])
if all(map(comparator, xrange(p, p+cnt, 1)))]
范围(1)
中的i的有什么意义?您可以放弃循环并分配i=0
。您所说的“过滤掉”是什么意思这里?您想将这三个1重置为0,还是想知道它们发生在哪里?有两件事-除非复制粘贴中出现错误,否则您没有8x8矩阵;请小心以0开头的数字,因为这是Python 2中的八进制表示法。如果1的数量大于等于3,我想保留三个连续的1,否则将它们设为0。以及窗口长度(在本例中为3)通常是一个变量。在样本矩阵中,对角线中没有一个连续的三个出现,对吗?范围(1)
中的i的点是什么?您可以放弃循环并指定i=0
。您所说的“过滤掉”是什么意思这里?您想将这三个1重置为0,还是想知道它们发生在哪里?有两件事-除非复制粘贴中出现错误,否则您没有8x8矩阵;请小心以0开头的数字,因为这是Python 2中的八进制表示法。如果1的数量大于等于3,我想保留三个连续的1,否则将它们设为0。以及窗口长度(本例中为3)通常是一个变量。在样本矩阵中,对角线中没有一个连续的三个出现,对吗?是的,我尝试过对角线的想法,但在挣扎了一天之后我放弃了。亲爱的Frerich,是的,这是真的,这就是我想要的,如果没有111,那么用它填充画布zeroes@user2964728什么是帆布?还有帆布ee update for simple Continuous values extractorcanvas表示在二维点图中绘制此矩阵时上三角区域的面积非常感谢alko:)是的,我尝试过对角线的想法,但经过一天的努力后放弃了。亲爱的Frerich,是的,这是真的,这就是我想要的,如果没有111,那么用它填充画布zeroes@user2964728什么是帆布?请参见更新以获取简单的连续值提取器当我在二维点图中绘制此矩阵时,Canvas表示上三角区域中的面积非常感谢alko:)