python数组各元素取整

对于python数组来说,可以有三种格式:

  1. numpy包里的array格式,例如,创建一个三行而列的数组:A = np.array([[1,2],[3,4],[5,6]])
  2. matrix格式,例如:B = np.matrix([[1,2],[3,4],[5,6]])
  3. 利用list组成的数组,例如:C = [[1,2],[3,4],[5,6]]

可以看到,arraymatrix格式都是numpy包封装的,那么它俩有什么区别呢?其实从字面意思就可以看出来,array尝试实现我们数学课本中的数组,而matrix尝试实现我们数学课本中的矩阵,数组和矩阵的区别就是这两个数据结构的区别。即:matrix格式的运算完全满足矩阵运算规则,比如,上边创建的B矩阵,我们运算:B*B就会报错,原因是行列数不满足矩阵乘法的规则。

一般情况下,我们使用array格式就够了。

做了一个稍长的铺垫之后接下来进入正题,对于array格式的数组来说,numpy提供了一个方便的函数:np.trunc(arr)来执行取整操作。
看下边一个小例子:

A = np.array([[1.2,2.2,3.2,4.2],[5.2,6.2,7.2,8.2]])
B = np.trunc(A)
print(B)

输出结果:

[[1. 2. 3. 4.]
[5. 6. 7. 8.]]

可以看到,虽然已经将对应的元素取整,但是元素本身的格式依旧不是整数,如果需要保证元素本身就是int数据类型,那么需要添加这条语句:C = B.astype(int)
输出C,可以看到元素已经变成了int类型。

如果原始数据是list,处理之后还需要得到list数据,那么只需要加一条转换语句即可:D = C.tolist()

看起来如果以后想将数组里的元素取整,只需要转换成array格式,调用np.trunc(arr),就可以解决一切问题了,没有别的函数什么事情了。其实不然,上帝给你打开了一扇窗,总会再给你挖一个坑。这种方法虽然简单易行,但是转换后的每个元素的格式是int32格式的,这个int32类型是经过numpy包二次封装的,在大多数情况下,和python基本的int数据类型没有什么区别,但是,当我们想把这个数组里的元素存放在json文件中,就会报这样的错误:99 is not JSON serializable。这是因为json是没有办法识别numpy包封装过的数据的。

好消息是,array转换成list的函数:A.tolist()函数贴心地提供了把数组里每个元素转换成基本数据类型的服务,只需要利用该函数转换之后,就可以放心地在json文件中保存啦。

发布了63 篇原创文章 · 获赞 189 · 访问量 27万+

猜你喜欢

转载自blog.csdn.net/u013044310/article/details/88234050
今日推荐