0

我正在尝试删除以下数组中的所有内容,除了两个数字和两者,之间的数字。

这是数组: [array([[ 1948.97753906, 1058.23937988]], dtype=float32)]

该数组的大小始终在变化(可以有 1 对数字或 6 对数字等),并且填充了不同的数字,但是,格式始终保持不变。

我目前有以下代码,但是,我认为这仅在数组中有一对数字时才有效?

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

任何帮助将不胜感激!

4

5 回答 5

1

如果这真的只是一个前缀/后缀,请使用replace

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

你可以用正则表达式做类似的事情:

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

这也将为您提供一个数字数组本身(因此从那里转换为浮点数是微不足道的)。

但是...如果您正在执行 str(lostfeatures),则原始文件必须已经在数组中。你为什么还要转换成字符串?您应该能够像这样直接提取数值数组:

lostfeatures[0][0]

(您似乎有两个间接级别... lostfeatures[0]= array([[ 1948.97753906, 1058.23937988]],然后lostfeatures[0][0]== [1948.97753906, 1058.23937988])。目前尚不清楚您的数据结构到底是什么样的,但这将是迄今为止最快的。

于 2013-10-23T13:36:09.493 回答
1

我会说你有一个self.features(坐标对?)的 2D numpy 数组(),你想格式化每一行(位置?),例如:

for pair in self.features: 
    print '{0}, {1}'.format(*pair)
于 2013-10-23T13:45:56.807 回答
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 回答
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 回答