我使用numpy来建立一个数学代码的原型。我的数学只包含了我进行矩阵运算的概率(乘法,numpy中的点函数)。据我所知,所有的值范围从0到1,我不知道我是否可以在32/64bit上强制numpy编码值(节省内存或享受更高的精度),但是上限固定为1?python&numpy:强制矩阵包含已知范围从x到y的值?
try1 = numpy.array([1.0,0.2564654646546],dtype='f16')
可以强制dtype的范围从x到y,每个值的内存量相同吗?
我使用numpy来建立一个数学代码的原型。我的数学只包含了我进行矩阵运算的概率(乘法,numpy中的点函数)。据我所知,所有的值范围从0到1,我不知道我是否可以在32/64bit上强制numpy编码值(节省内存或享受更高的精度),但是上限固定为1?python&numpy:强制矩阵包含已知范围从x到y的值?
try1 = numpy.array([1.0,0.2564654646546],dtype='f16')
可以强制dtype的范围从x到y,每个值的内存量相同吗?
据我所知,numpy数组不支持定点算法,我还没有听说有任何添加它的计划。如果你有兴趣玩这些东西,你可以检查出matlab的fixed-pt toolbox,或者如果你真的喜欢数学,你可以使用整数数据类型和自己的'点'来跟踪你自己。
虽然浮点运算的方式已经非常简洁,但我不确定只要知道数字在[0,1]中,您就可以获得每比特精度的堆。浮点类似于科学记数法,增加位数主要为您提供更多的“有效位数”,而不仅仅是更大范围的数字。
我想现在你可以用这个acchieve:
a = np.linspace(0, 1, number_of_points)
不容易,没有。 numpy数据类型是底层C代码中低级数据类型的名称。 – katrielalex
由于它们是概率,它们不应该在[0,1]的范围内,而不是(-inf,1]?(你不应该用对数计算来保留数值稳定性吗?) –
@larsmans:对数如果经常使用点积(=>加法),那么它就不会更好。 – smci