在numpy数组的第一行中找到第一个0

时间:2015-11-02 04:36:22

标签: python arrays numpy

我正在尝试使用python编写脚本来通过右手方法解决迷宫问题。我写了下面的脚本来读取迷宫的文件并将其放入numpy 2D数组中。现在,我想搜索数组的第一行并找到0.这个0是迷宫的起点。从这里开始,我将应用我的迷宫算法来检查正方形是否有1或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()

2 个答案:

答案 0 :(得分:1)

我建议你看一下numpy.array方法argmin

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

答案 1 :(得分: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)