前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >手撕numpy(二):各种特性和简单操作

手撕numpy(二):各种特性和简单操作

作者头像
朱小五
发布2020-03-18 17:39:51
4300
发布2020-03-18 17:39:51
举报
文章被收录于专栏:凹凸玩数据凹凸玩数据

手撕numpy系列持续更新中~

《手撕numpy(一):简单说明和创建数组的不同方式》

1、numpy中ndarray的一些常用属性

  • ndim:返回数组的维数;
  • shape:返回数组的形状;
  • dtype:返回数组元素的数据类型;
  • size:返回数组中元素的个数;
  • itemsize:返回数组中每一个元素占用空间的大小,以字节为单位;
  • nbytes:返回数组中所有元素占用空间的大小,以字节为单位;

1)举例说明

代码语言:javascript
复制
x = np.arange(10).reshape(2,5)
display(x)

display(x.ndim)
display(x.shape)
display(x.dtype)
display(x.size)
display(x.itemsize)
display(x.nbytes)

结果如下:

2)单独说一下属性itemsize和nbytes的含义

2、列表与数组之间的相互转化

1)列表转数组:直接将一个列表当作array()函数的参数即可;

代码语言:javascript
复制
import numpy as np
list1 = list(range(10))
display(list1)
array1 = np.array(list1)
display(array1)

结果如下:

2)数组转列表:tolist()

代码语言:javascript
复制
import numpy as np
array2 = np.arange(10).reshape(2,5)
display(array2)
list2 = array2.tolist()
display(list2)

array3 = np.arange(10)
display(array3)
list3 = array3.tolist()
display(list3)

结果如下:

3、numpy中的常数

  • 正无穷:Inf = inf = infty = Infinity = PINF
  • 负无穷:NINF
  • 正零:PZERO
  • 负零:NZERO
  • 非数值:nan = NaN = NAN
  • 自然数e:e
  • π:pi
  • 伽马:euler_gamma
  • None:newaxis

操作如下:

代码语言:javascript
复制
display(np.inf)
display(np.NINF)
display(np.PZERO)
display(np.NZERO)
display(np.nan)
display(np.e)
display(np.pi)
display(np.euler_gamma)
display(np.newaxis)

结果如下:

4、numpy中的数据类型与数据类型转化

1)numpy中常用的的数据类型

2)numpy中的数据类型转化

记住一句话:numpy中的数据类型转换,不要使用x.dtype修改元素的数据类型,最好用x.astype()这种方式。

① 使用dtype原地修改数组的数据类型;

代码语言:javascript
复制
x = np.array([1.2,3.4,5.6],dtype=np.float64)
display(x)
display(x.dtype)
display(x.nbytes)
# --------------------------------------------
x.dtype="float32"
display(x)
display(x.nbytes)
# --------------------------------------------
x.dtype="float16"
display(x)
display(x.nbytes)

结果如下:

② 使用dtype原地修改数组的数据类型,为什么会出现上述现象?

③ 使用astype()函数修改数组的数据类型:相当于新创建了一个数组;

代码语言:javascript
复制
z = np.array([1.5,3.7,4.8])
display(z)
display(z.dtype)
# --------------------------
zz = z.astype(np.int64)
display(zz)
display(zz.dtype)

结果如下:

5、改变数组的形状

  • 使用numpy中的reshape()函数修改数组对象;
  • 使用数组对象的reshape()函数修改数组对象(这个更好用);

1)使用numpy中的reshape()函数修改数组对象;

代码语言:javascript
复制
xx = np.arange(10).reshape(2,5)
xxx = np.reshape(xx,(5,2))
display(xxx)

结果如下:

2)使用数组对象的reshape()函数修改数组对象;

代码语言:javascript
复制
yy = np.arange(10).reshape(2,5)
display(yy)

结果如下:

3)改变数组形状时,如果维度大于1,可以将“最后一个维度”设置为-1;

代码语言:javascript
复制
p = np.arange(6).reshape(2,3)
display(p)
# ----------------------------
q = np.arange(6).reshape(2,-1)
display(q)

结果如下:

  • 注意:可以这样做的原因在于,当你指明了前面的维度,最后一个维度会根据数组元素个数和前面的维度数,自动计算出最后一个维度的维度数,也就是说【维度一 * 维度二 * … * 维度N = 元素个数】。

6、数组扁平化:ravel()函数和flatten()函数

① 两个函数的相同点

  • 不管你给我的数组是多少维的,通过这两个函数之后,我都给你压缩为一维数组。

② 两个函数的不同点

③ 操作如下

代码语言:javascript
复制
array1 = np.array([[1,2,3],[4,5,6]])
display(array1)

array2 = array1.ravel()
display(array2)

array3 = array1.flatten()
display(array3)

# 此时我们修改array2和array3中的某个元素,看看对于array1的影响
array2[0] = 666
display(array2)
display(array1)

array3[1] = 888
display(array3)
display(array1)

结果如下:

后台回复关键词「进群」,即刻加入读者交流群~

先撕numpy,再撕pandas!

朱小五

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-03-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 凹凸数据 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、numpy中ndarray的一些常用属性
  • 2、列表与数组之间的相互转化
  • 3、numpy中的常数
  • 4、numpy中的数据类型与数据类型转化
  • 5、改变数组的形状
  • 6、数组扁平化:ravel()函数和flatten()函数
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档