2015-11-02 957 views
1

我想用右手方法使用python編寫腳本來解決迷宮問題。我寫下了下面的腳本來讀入迷宮的文件,並將它放入numpy 2D數組中。現在,我想搜索數組的第一行並找到0。這個0是迷宮的起點。從這裏我會應用我的迷宮算法來檢查是否他們有1或0點的方塊。在numpy數組的第一行中找到第一個0

Maze_matrix是包含我的迷宮的矩陣,我想找到第一個0的索引第一排。

#!/usr/bin/python 

import sys 
import numpy as np 
import itertools 

if len(sys.argv) == 3: 
     maze_file = sys.argv[1] 
     soln_file = sys.argv[2] 
     rows = [] 
     columns = [] 

     with open(maze_file) as maze_f: 
       for line in maze_f: 
         row, column = line.split() 
         row = int(row) 
         column = int(column) 
         rows.append(row) 
         columns.append(column) 
       maze_matrix = np.zeros((rows[0], columns[0])) 
       for line1, line2 in zip(rows[1:], columns[1:]): 
         maze_matrix[line1][line2] = 1 

     print maze_matrix 

else: 
     print('Usage:') 
     print(' python {} <maze file> <solution file>'.format(sys.argv[0])) 
     sys.exit() 
+0

如果您滿意答案upvoting罰款,但解決您的問題的解決方案應標記爲「*接受此答案*」。這不僅讚賞答案,而且向其他人發出信號*這個問題已經解決了*。 – daniel451

回答

1

我建議採取看看numpy.array方法argmin

>>> n = numpy.ones(100) 
>>> n[50] = 0 
>>> n.argmin() 
50 
1

我會建議使用numpy.where()。它具有非常好的性能,並且一次搜索整個數組(或子集)。如果一個元素的條件爲真,它將返回一個包含該元素索引的數組。

In [1]: import numpy as np 

In [2]: a = np.random.randint(0, 9, (4,4)) 

In [8]: a 
Out[8]: 
array([[6, 5, 0, 3], 
     [4, 5, 8, 6], 
     [0, 3, 4, 4], 
     [6, 4, 6, 7]]) 

In [9]: np.where(a == 0) 
Out[9]: (array([0, 2]), array([2, 0])) # two 0's found 
             # first at a[0, 2] (row 0, column 2) 
             # second at a[2, 0] (row 2, column 0) 
相關問題