0

次の配列から、2 つの数字とその,中間を除くすべてを削除しようとしています。

これは配列です: [array([[ 1948.97753906, 1058.23937988]], dtype=float32)]

この配列のサイズは常に変化し (1 組の数値または 6 組の数値など)、異なる数値で埋められますが、形式は常に同じままです。

私は現在、以下のコードを持っていますが、これは配列に数字のペアが1つある場合にのみ機能すると思いますか??

final = str(self.lostfeatures).strip('[array([[ ').strip(']], dtype=float32)')

どんな助けでも大歓迎です!

4

5 に答える 5

1

self.features(座標ペア?) の 2D numpy 配列 ( ) があり、各行 (位置?) をフォーマットする必要があることをパントします。たとえば、次のようになります。

for pair in self.features: 
    print '{0}, {1}'.format(*pair)
于 2013-10-23T13:45:56.807 に答える
1

それが本当に単なるプレフィックス/サフィックスである場合は、次を使用しますreplace

final = str(self.lostfeatures).replace('[array([[','').replace(']], dtype=float32)', '')

正規表現で同様のことができます:

numbers = re.findall('(?P<number>\d+\.\d+)', str(self.lostfeatures))

これにより、数値自体の配列も得られます (したがって、そこから float にキャストするのは簡単です)。

ただし... str(lostfeatures) を実行している場合は、元のものが既に配列に含まれている必要があります。なぜ文字列にキャストするのですか? 次のように、数値配列を直接抽出できるはずです。

lostfeatures[0][0]

(あなたは2つのレベルの間接性を持っているようです... lostfeatures[0]= array([[ 1948.97753906, 1058.23937988]]、次にlostfeatures[0][0]== [1948.97753906, 1058.23937988])。データ構造がどのように見えるかは正確にはわかりませんが、それが断然最速です。

于 2013-10-23T13:36:09.493 に答える
0

このユースケースにはおそらく正規表現をお勧めします

import re

ptrn = re.compile(r'((?:\d+(?:\.\d+)?, ?)+(?:\d+(?:\.\d+)?))'

x = "[array([[ 1948.97753906, 1058.23937988]], dtype=float32)]"
print ptrn.search(x).group(1)
于 2013-10-23T13:41:11.047 に答える
0

あなたの例のように。それがあなたの質問に答えると思います。

>>> x = "[array([[ 1948.97753906, 1058.23937988]], dtype=float32)]"
>>> print x.split("[[")[1].split("]]")[0].replace(",","")
于 2013-10-23T13:34:00.933 に答える
0

フォーマットが常に同じである場合、つまり、常に で始まり"[array([["、常に で終わる"]], dtype=float32)"場合は、代わりにスライスを使用する必要があります。

final = str(self.lostfeatures)[len('[array([[ '):-len(']], dtype=float32)')]
于 2013-10-23T13:37:13.027 に答える