python - 防止 numpy 将数值向上转换为字符串

标签 python python-3.x numpy

通常,我对 numpy 确定保存 np.array 中序列对象所需的最小类型的方式感到满意。 :

>>> print(np.array([42, 4.2]))
array([42, 4.2], dtype=float64)

这非常直观:我需要将整数向上转换为 float 才能处理数据。

但是,以下情况对我来说似乎不太直观:

>>> print(np.array([42, 4.2, 'aa']))
array(['42', '4.2', 'aa'], dtype='<U32')

我希望结果数组的类型为 np.object 。我不想打电话

np.array(ma_list, dtype=np.object)

因为我想在my_list=[42, 4.2]的情况下保留旧的行为以及 my_list=['aa'] 的情况(这将导致类型为 <U2 )。

是否可以调整默认行为以防止将数值向上转换为字符串,或者是否有任何具有相同效果的解决方法?

最佳答案

看起来您想在让 numpy 确定数据类型之前对数据进行一些预处理。根据我对你的标准的理解,如果列表中的所有对象都是数字,或者它们都不是数字,你想让 numpy 确定类型。如果类别是混合的,您需要使用np.object

幸运的是,Python 中的所有数字都有抽象基类 numbers.Number迷上:

from numbers import Number

isnum = lambda x: isinstance(x, Number)
isntnum = lambda x: not isinstance(x, Number)
if all(map(isnum, my_list)) or all(map(isntnum, my_list)):
    dtype = None
else:
    dtype = np.object

my_arr = np.array(my_list, dtype=dtype)

这里的措辞并不理想,但它应该有效,并为您提供一个更优雅和更高效的起点。

关于python - 防止 numpy 将数值向上转换为字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51673388/

相关文章:

python - 有没有办法通过命令行交互执行selenium "queries"?

python - Django是同步的还是异步的?

html - 如何更好地处理 HTML 标签之间的正则表达式捕获组?

python - numpy 日期问题 - 将浮点年周格式转换为 numpy 的日期格式

python - 如何制作重复的 `numpy` 数组 View

python - 根据索引计算从numpy数组中的所有点到单个点的距离

python - 为什么 str(None) 不是 str(None)?

python-3.x - 在 Pandas 数据框中运行嵌套循环时丢失行

制作一个可以接受可迭代或任意数量参数的函数的 Pythonic 方法?

python - 使用 numpy 数组作为 lambda 参数?