【发布时间】:2020-02-19 19:43:16
【问题描述】:
关于效率,我们如何创建一个大型 numpy 数组,其中值是特定范围内的浮点数。
例如,对于一个固定大小的一维 numpy 数组,其中值介于 0 和 200,000,000.00 之间(即 [0, 200,000,000.00] 中的值),我可以使用浮点数的最小数据类型创建数组 (@987654323 @),然后验证任何新值(来自用户输入),然后再将其插入数组:
import numpy as np
a = np.empty(shape=(1000,), dtype=np.float16))
pos = 0
new_value = input('Enter new value: ')
# validate
new_value = round(new_value, 2)
if new_value in np.arange(0.00, 200000000.00, 0.01):
# fill in new value
a[pos] = new_value
pos = pos + 1
问题是,我们能否根据数组的dtype 强制执行new_value 的有效性(根据已知的最小/最大值和小数位数)?
换句话说,我们在创建数组时就知道小数的范围和个数,这是否让我们有机会(更)有效地在数组中插入有效值?
【问题讨论】:
-
new_value应该被转换为a的数据类型,即float16你只需要确保它在你的范围内。但是,如果您想控制舍入的完成方式,那么使用某些功能来控制它可能会很有用。您不需要创建数组并检查您的值是否在一个简单的范围内检查是否应该这样做。if 0 <= value < 2000000: #append... -
加上检查步长是否兼容(类似于
new_value % step_size == 0),但要注意使用modulo on floats、or more general floating point math时的问题
标签: python python-3.x numpy validation numpy-ndarray