-1

I began with python and I need to find, in a matrix, the next higher number from a given number. Actually the value of the number is not interesting but I need its location.

For example, if my matrix is

a = ([0.14, 0.93, 0.2], [0.1, 0.8, 0.55])

and my given number is 0.5

How would I do to have (3, 2) for i and j value of 0.55 which is the next higher number from 0.5?

4

3 に答える 3

1

フラット化された方法でセルをループできます。

>>> a = ([0.14,0.93,0.2],[0.1,0.8,0.55])
>>> [(v, (j, i)) for i, row in enumerate(a,1) for j,v in enumerate(row, 1)]
[(0.14, (1, 1)), (0.93, (2, 1)), (0.2, (3, 1)), (0.1, (1, 2)), (0.8, (2, 2)), (0.55, (3, 2))]

> 0.5 であった要素の最小値も必要なので、これを行うことができます。

>>> cc = ((v, (j, i)) for i, row in enumerate(a,1) for j,v in enumerate(row, 1))
>>> min(c for c in cc if c[0] > 0.5)
(0.55, (3, 2))

(これをすべて 1 行に詰め込むこともできますが、列挙と検索を分けた方がわかりやすいと思います。)

于 2013-04-06T20:36:09.350 に答える
0

最初に列または行で検索する必要があるかどうかによって異なります。どちらの方法でも、行または列を並べ替えることができます。そうすれば、各行/列でバイナリ検索を実行できます。

于 2013-04-06T20:29:55.467 に答える
0

残念ながら、マトリックス内のすべての要素をスキャンする必要があります...

コードは次のようになります。

num=0.5
min = 999.999 # or a large enough number
pos_i=-1
pos_j=-1

for i ...:
    for j ...:
        if a[i][j] < min and a[i][j] > num:
            pos_i = i
            pos_j = j
            min = a[i][j]

これは O(n^2) の複雑さを持っています

データを並べ替えることで、約 O(n log(n)) に改善できますが、インデックスを保持するかどうかによって異なります...

于 2013-04-06T20:35:51.400 に答える