mar*_*tin 2 python arrays numpy rounding
刚刚看到python zip()内置中看起来很奇怪的行为.我传递了一个Numpy数组的舍入小数,但它吐出了扩展版本.
这是原始数组,我的目标是生成一个字典,其中每个独特元素的占用比例.np是Numpy.
a = np.array([1, 2, 3, 1, 1, 2, 1])
Run Code Online (Sandbox Code Playgroud)
所以我去做
elems, counts = np.unique(a, return_counts=True)
Run Code Online (Sandbox Code Playgroud)
哪个吐(array([1, 2, 3]), array([4, 2, 1])).正确.但是现在我想要比例,而不是数量(四舍五入到第三位),所以我这样做
counts = np.round(counts/a.size, 3)
Run Code Online (Sandbox Code Playgroud)
这给array([ 0.571, 0.286, 0.143])了counts.现在把它压缩成所寻求的词典:
dict(zip(*(elems, counts)))
Run Code Online (Sandbox Code Playgroud)
这吐了{1: 0.57099999999999995, 2: 0.28599999999999998, 3: 0.14299999999999999},所以看起来圆形的数字已经看到了一些数字!
Numpy只在打印numpy数组时显示不同的有效数字量.您可以使用调整打印精度set_printoptions.
使用您的数据的示例:
import numpy as np
a = np.array([1, 2, 3, 1, 1, 2, 1])
elems, counts = np.unique(a, return_counts=True)
counts = np.round(counts/a.size, 3)
np.set_printoptions(precision=20)
print(counts)
Run Code Online (Sandbox Code Playgroud)
输出:
[ 0.57099999999999995204 0.28599999999999997646 0.14299999999999998823]
Run Code Online (Sandbox Code Playgroud)