gpt4 book ai didi

python - Python 中 numpy 字符串数组的功能屏蔽

转载 作者:太空宇宙 更新时间:2023-11-04 05:44:41 25 4
gpt4 key购买 nike

我正在尝试从如下字符串中提取第一个(或唯一一个) float 整数:

str1 = np.asarray('92834.1alksjdhaklsjh')
str2 = np.asarray'-987___-')
str3 = np.asarray'-234234.alskjhdasd')

如果解析正确,我们应该得到

var1 = 92834.1   #float
var2 = -987 #int
var3 = -234234.0 #float

使用 numpy 数组的“掩码”属性,我为任何 str_ 变量想出了类似的东西,例如:

>> ma1 = np.asarray([not str.isalpha(c) for c in str1.tostring()],dtype=bool)

array([ True, True, True, True, True, True, True, False, False,
False, False, False, False, False, False, False, False, False,
False, False], dtype=bool)

>> str1[ma1]

IndexError: too many indeces for array

现在我已经阅读了所有我能找到的关于使用 bool 数组进行索引的内容;但我无法让它工作。

它很简单,我认为不值得为它找出一个正则表达式,但它又很复杂,一直给我带来麻烦。

最佳答案

您不能像这样创建具有不同类型的数组,如果您想在 numpy 数组对象中使用不同类型,您可以使用 record array 并在数组中指定类型,但此处为一种更直接的方法,您可以将 numpy 对象转换为字符串并使用 re.search 获取数字:

>>> float(re.search(r'[\d.-]+',str(str1)).group())
92834.1
>>> float(re.search(r'[\d.-]+',str(str2)).group())
-987.0
>>> float(re.search(r'[\d.-]+',str(str3)).group())
-234234.0

但是如果你想使用 numpy 方法,你需要先从你的字符串创建一个数组:

>>> st=str(str1)
>>> arr=np.array(list(st))
>>> mask=map(str.isalpha,st)
>>> mask
[False, False, False, False, False, False, False, True, True, True, True, True, True, True, True, True, True, True, True, True]

>>> arr[~mask]
array(['9', '2', '8', '3', '4', '.', '1'],
dtype='|S1')

然后使用str.join方法和float:

>>> float(''.join(arr[~mask]))
92834.1

关于python - Python 中 numpy 字符串数组的功能屏蔽,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32733156/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com