python - numpy 数组的元素明智测试是数字

标签 python arrays numpy

我有一个数组如下:

In [1]: x = array(['1.2', '2.3', '1.2.3'])

我想测试数组中的每个元素是否可以转换为数值。也就是说,一个函数:is_numeric(x) 将返回一个 True/False 数组,如下所示:

In [2]: is_numeric(x)
Out[2]: array([True, True, False])

如何做到这一点?

最佳答案

import numpy as np

def is_float(val):
        try:
            float(val)
        except ValueError:
            return False
        else:
            return True

a = np.array(['1.2', '2.3', '1.2.3'])

is_numeric_1 = lambda x: map(is_float, x)              # return python list
is_numeric_2 = lambda x: np.array(map(is_float, x))    # return numpy array
is_numeric_3 = np.vectorize(is_float, otypes = [bool]) # return numpy array

根据数组的大小和返回值的类型,这些函数有不同的速度。

In [26]: %timeit is_numeric_1(a)
100000 loops, best of 3: 2.34 µs per loop

In [27]: %timeit is_numeric_2(a)
100000 loops, best of 3: 3.13 µs per loop

In [28]: %timeit is_numeric_3(a)
100000 loops, best of 3: 6.7 µs per loop

In [29]: a = np.array(['1.2', '2.3', '1.2.3']*1000)

In [30]: %timeit is_numeric_1(a)
1000 loops, best of 3: 1.53 ms per loop

In [31]: %timeit is_numeric_2(a)
1000 loops, best of 3: 1.6 ms per loop

In [32]: %timeit is_numeric_3(a)
1000 loops, best of 3: 1.58 ms per loop

如果 list 没问题,请使用 is_numeric_1

如果您想要一个 numpy 数组,并且 a 的大小很小,请使用 is_numeric_2

否则,使用 is_numeric_3

关于python - numpy 数组的元素明智测试是数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37996471/

相关文章:

perl - 我如何检查一个值是否在 Perl 的列表中?

arrays - 将文件中的行读入 Bash 数组

java - 将数组 [] 从 AsyncTask 返回到 Main Activity

python - 使用 backref "length"和 SQLAlchemy 进行过滤的方法

python - 启动时以全屏方式运行 turtle 程序

python - 需要解释 Python 中 json 和 dict 的区别

python - 查找数组中分隔对的数量

python - 有效地创建 numpy 数组,其值远离中心而递减

python - 提高 Gauss-Seidel (Jacobi) Solver 的 Numpy 速度

python - python 中的多重继承以及向继承类传递参数