Python简单NumPy数组未显示预期值

2024-04-24 10:23:20 发布

您现在位置:Python中文网/ 问答频道 /正文

这里是Python新手

我想我已经编写了一些非常简单的代码,只从接收到的字符串中提取数字

它似乎在工作,除了我试图将检索到的数字存储在NumPy数组中以供进一步处理,但我看到的只是“古怪”的数字

import numpy as np
#import array
apiString = " 'open': 1.082865 'close': 1.08287 'min': 1.08266 'max': 1.08295 'volume': 888"
np_Myarr01 = np.empty([1,5], dtype=float)

def Find_numbers():
    for word in apiString.split():
        try:
            thisNumber=float(word)
            print ("Found", thisNumber)
            Store_number(thisNumber)
        except ValueError:
            pass
    return

def Store_number(thisNumber):
    np.append(np_Myarr01, thisNumber)
    print("store " + str(thisNumber))
    return


# START OF MAIN PROGRAM

Find_numbers()
print (np_Myarr01)

***输出***************************

Found 1.082865
store 1.082865
Found 1.08287
store 1.08287
Found 1.08266
store 1.08266
Found 1.08295
store 1.08295
Found 888.0
store 888.0
[[  2.17306514e-316   0.00000000e+000   6.92674292e-310   6.92674292e-310
    2.37151510e-322]]

我希望数组能够读取

[[ 1.082865  1.08287  1.08266  1.08295  888.0]]

任何帮助都将不胜感激。谢谢大家!


Tags: storeimportdefnp数字数组findfloat
2条回答

除了@barmar的注释外,如果您的API字符串始终如示例所示,则可以在拆分(使用切片)后提取其他每一项,并让NumPy处理其余的转换:

np_Myarr01 = np.fromiter(apiString.split()[1::2], float)

您可以混合使用str.split()re.searchapiString中提取数字:

这:

apiString = " 'open': 1.082865 'close': 1.08287 'min': 1.08266 'max': 1.08295 'volume': 888"

my_array = np.array([float(x) for x in apiString.split() if not re.search('[a-zA-Z]', x)])

将产生:

array([  1.082865,   1.08287 ,   1.08266 ,   1.08295 , 888.      ])

详情:

1)apiString.split()将在原始字符串中有空格的字符串列表中拆分字符串

2)re.search('[a-zA-Z]', x)将返回True,如果x中存储的字符串包含大写或小写字母(即不是数字)(这也是我们在这里使用not的原因)

3)float(x)将字符串'1.808'转换为float类型

相关问题 更多 >