【问题标题】:Creating a new matrix under specified condition from user inputted matrix从用户输入的矩阵在指定条件下创建一个新矩阵
【发布时间】:2020-12-12 14:31:05
【问题描述】:

作为 python 的新手,我遇到了一个我无法完成的任务。我应该创建一个新矩阵,考虑到用户输入的原始矩阵,其中每个元素对应于大于或等于原始矩阵中相应元素的相邻元素的数量。由于英语不是我的母语,我可能没有正确地表达它,所以这里是一个例子:

input:
3x3 matrix
9 14 13
3 0  7
8 15 15

output:
3x3 matrix
2 5 2
1 0 1 
2 5 3

因此,如果不清楚,新矩阵将确定有多少相邻元素大于或等于原始矩阵中的某个元素。 9 大于 3 和 0,因此结果为“2”,14 大于所有相邻的,因此打印出“5”,等等……当然,它还考虑了对角线。

到目前为止,我已经了解了原始矩阵的输入,但我不确定如何进一步进行。我不是那种能够获得大学资料、教授或同伴帮助的人,我的实验和在线搜索到目前为止都是徒劳的。我不需要一个完整的解决方案,而不是指针和概念解释。

这是目前为止的代码:

# matrix input
  
rOne = int(input("Number of rows:")) 
cOne = int(input("Number of columns:")) 
  
# initialize matrix 
matrixOne = [] 
print("Enter elements rowwise:") 
  
# user input
for i in range(rOne):          # for loop za redove
    a =[] 
    for j in range(cOne):      # for loop za kolone 
         a.append(int(input())) 
    matrixOne.append(a) 
  
  

# print matrix one
for i in range(rOne): 
    for j in range(cOne): 
        print(matrixOne[i][j], end = " ") 
    print() 

【问题讨论】:

    标签: python matrix


    【解决方案1】:

    这是一个可以做确切事情的函数:

    def adj_matrix(matrixOne, rOne, cOne):
        
        new_lst = []
        
        for i in range(rOne):
            a = []
            for j in range(cOne):
                count = 0
                x, y = (i, j) # matrix values here
                cells = list(starmap(lambda a,b: (x+a, y+b), product((0,-1,+1), (0,-1,+1)))) # this will find all the adjacent index
        
                filtered_cell = [p for p in cells if (sum(p)>=0 and prod(p)>=0)] # this filters out all the negative indexs
                filtered_cell = [p for p in filtered_cell if p[0]<rOne and p[1]<cOne] # this filters out index that are greater than matrix
        
                for z in filtered_cell:
                    if matrixOne[i][j] >= matrixOne[z[0]][z[1]]:
                        count += 1
                
                a.append(count-1)
            new_lst.append(a)
    
        return new_lst
    

    也导入:

    from itertools import product, starmap
    
    from math import prod
    

    【讨论】:

      【解决方案2】:

      居然解决了这个问题,感觉棒极了:D

      def get_neighbor_elements(current_row, current_col, total_rows, total_cols):
          neighbors = []
          for i in [-1, 0, 1]:  # red pre, isti red, red posle
              for j in [-1, 0, 1]:  # kolona pre, ista kolona, kolona posle
                  row = current_row + i
                  col = current_col + j
                  if row < 0 or col < 0 or row >= total_rows or col >= total_cols:  # preskace se ako se izaslo iz granica matrice
                      continue
                  if row == current_row and col == current_col:# ako su red i kolona isti, preskace se(to je taj isti element)
                      continue
                  neighbor = [row, col]
                  neighbors.append(neighbor)
          return neighbors
       
       
      def make_new_matrix(old_matrix):
          new_matrix = []
          for i in range(len(old_matrix)):
              new_matrix.append([])
          for i in range(len(old_matrix)):  # iteriramo kroz redove stare matrice
              for j in range(len(old_matrix[i])):  # iteriramo kroz kolone stare matrice
                  neighbors = get_neighbor_elements(i, j, len(old_matrix), len(old_matrix[i]))  # dobavljamo komsije
                  count = 0
                  for neighbor in neighbors:  # sad gledamo da li je trenutni element veci ili jednak susednim
                      if old_matrix[i][j] >= old_matrix[neighbor[0]][neighbor[1]]:
                          count += 1
                  new_matrix[i].append(count)
          return new_matrix
       
       
      def print_matrix(matrix):
          for i in range(len(matrix)):
              for j in range(len(matrix[i])):
                  print(str(matrix[i][j]) + "   ", end='')
              print()
       
       
      if __name__ == '__main__':
          matrix = [[12, 10], [2, 10]]
          print("Old matrix: ")
          print_matrix(matrix)
          new_matrix = make_new_matrix(matrix)
          print("New matrix")
          print_matrix(new_matrix)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-05-04
        • 1970-01-01
        • 1970-01-01
        • 2013-09-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多