Chinaunix

标题: 二维数组问题 [打印本页]

作者: huanghaoyang199    时间: 2018-03-24 13:31
标题: 二维数组问题
目前有随机的正方形矩阵,元素只有数字0和1,若出现由1组成三角形需将其尺寸和数量print。比如:              
       1
1     1    1 尺寸为2(遍历几行出现size就是几)
                                                 1
                                            1    1   1   
                                        1   1   1    1   1尺寸为3
这些大小不同三角形潜藏在0,1随机矩阵中,求各种size的数量,
并print为(size,amount)有多少种size全部列出
例如  1     1      1       1     1
          0     1      1      1    1
           1      1     1     1    1
           1     1    1     1      1
这个矩阵print为[(2,,(3,2)].想了三天了还是想不出来,求各位大佬出手!


作者: huanghaoyang199    时间: 2018-03-24 13:31
会的私信我,红包多多的!
作者: dahe_1984    时间: 2018-03-25 12:02
import numpy as np

a=np.random.randint(0,2,size=[10,10])
print(a)

def oneTriangle(list):
    tri=np.ones(list,dtype=int)
    tri_upper_no_diag=np.triu(tri,k=1)[::-1]
    tri_lower_no_diag=np.tril(tri,k=0)

    a=np.concatenate((tri_upper_no_diag,tri_lower_no_diag),axis=1)

    b=np.delete(a,0,axis=1)

    return b

list=[2,2]
b = oneTriangle(list)

def subsearch(a, b):
    number = 0
    x_b, y_b = b.shape

    for i in range(0,a.shape[0]):
        for j in range(0,a.shape[1]):
            #print(i,j)
            c = a[ii+x_b), jj+y_b)]
            if((c.shape == b.shape) and ((c == b).all())):
                print(c,'\n', b)
                number = number + 1
    return number

number = subsearch(a, b)
print(number)

作者: dahe_1984    时间: 2018-03-25 12:02
[[1 0 0 1 1 1 0 0 0 0]
[0 0 0 1 1 0 1 1 1 0]
[0 1 1 1 0 1 1 1 1 0]
[1 0 1 0 1 0 1 0 0 0]
[0 0 0 0 1 0 0 0 1 0]
[0 1 1 0 1 0 0 1 0 0]
[0 1 0 1 0 1 1 1 0 0]
[1 0 1 1 0 0 1 0 0 0]
[1 0 1 0 1 0 0 0 0 1]
[0 1 0 1 1 1 1 1 1 0]]
[[0 1 0]
[1 1 1]]
[[0 1 0]
[1 1 1]]
1
作者: dahe_1984    时间: 2018-03-25 12:03
[[0 0 1 0 1 0 1 1 1 1 0 0 1 1 1 1 0 1 1 1]
[0 1 0 1 1 1 1 1 1 1 1 0 0 0 1 0 0 1 0 1]
[1 1 0 0 0 1 1 1 1 0 0 0 1 0 0 1 0 1 0 1]
[1 1 1 1 1 0 1 1 1 1 1 0 0 1 1 0 0 0 1 1]
[0 0 0 0 1 1 0 1 0 1 1 1 1 1 0 0 1 1 1 0]
[1 1 0 1 0 0 1 1 1 1 0 1 0 1 0 0 1 1 0 0]
[0 1 0 0 1 0 1 0 1 0 0 0 0 0 0 0 1 1 0 0]
[0 0 1 1 1 1 0 0 1 1 1 0 1 1 1 0 1 0 0 0]
[1 0 1 0 0 1 1 1 0 0 0 1 0 1 1 0 1 1 0 0]
[1 1 0 1 0 1 0 1 0 0 1 0 1 0 0 0 0 1 1 1]
[1 0 0 0 0 0 0 1 0 1 1 1 1 0 1 0 0 1 1 0]
[0 0 1 0 1 1 0 1 1 1 1 1 1 0 1 1 0 1 1 1]
[1 0 1 1 0 0 1 0 1 0 0 1 1 1 0 1 0 1 1 1]
[0 1 0 0 0 0 0 1 1 0 0 0 1 0 0 1 1 0 0 1]
[1 1 0 0 0 1 0 0 1 1 1 0 0 1 0 1 1 1 0 0]
[1 0 1 1 1 1 1 0 1 1 1 0 0 1 1 0 0 1 0 1]
[1 1 1 0 0 0 1 1 1 0 0 0 0 0 0 1 0 1 1 0]
[0 0 0 0 0 1 1 1 0 0 0 0 0 1 0 0 1 0 1 0]
[1 0 0 1 0 0 1 0 0 0 1 0 0 1 1 0 1 1 1 0]
[0 0 0 0 0 0 0 0 0 1 0 1 0 0 1 1 1 1 1 1]]
[[0 1 0]
[1 1 1]]
[[0 1 0]
[1 1 1]]
[[0 1 0]
[1 1 1]]
[[0 1 0]
[1 1 1]]
[[0 1 0]
[1 1 1]]
[[0 1 0]
[1 1 1]]
[[0 1 0]
[1 1 1]]
[[0 1 0]
[1 1 1]]
[[0 1 0]
[1 1 1]]
[[0 1 0]
[1 1 1]]
5

作者: dahe_1984    时间: 2018-03-25 12:04
具体怎么循环你在自己看吧。
作者: dahe_1984    时间: 2018-03-25 12:50
本帖最后由 dahe_1984 于 2018-03-25 13:52 编辑
  1. import numpy as np
  2. import math

  3. a=np.random.randint(0,2,size=[20,20])
  4. print(a)
  5. x_a, y_a = a.shape

  6. def oneTriangle(list):
  7.     tri=np.ones(list,dtype=int)
  8.     tri_upper_no_diag=np.triu(tri,k=1)[::-1]
  9.     tri_lower_no_diag=np.tril(tri,k=0)

  10.     a=np.concatenate((tri_upper_no_diag,tri_lower_no_diag),axis=1)

  11.     b=np.delete(a,0,axis=1)

  12.     return b

  13. def subsearch(a, b):
  14.     number = 0
  15.     x_b, y_b = b.shape

  16.     for i in range(0,a.shape[0]):
  17.         for j in range(0,a.shape[1]):
  18.             #print(i,j)
  19.             c = a[i:(i+x_b), j:(j+y_b)]
  20.             if((c.shape == b.shape) and ((c == b).all())):
  21.                 #print(c,'\n', b)
  22.                 number = number + 1
  23.     return (number, x_b)

  24. min_value = min(x_a, y_a)
  25. for i in range(2, min_value):
  26.     b = oneTriangle([i, i])
  27.     #print(b)
  28.     number = subsearch(a, b)
  29.     print(number)
复制代码






欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2