(数据分析三板斧)第一斧Numpy-第二节:生成数组数组属性和切片

Posted 快乐江湖

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了(数据分析三板斧)第一斧Numpy-第二节:生成数组数组属性和切片相关的知识,希望对你有一定的参考价值。

文章目录

一:生成数组

(1)由底层ndarray构造器创建:np.arrary()

上一节简单说明了array()函数的用法,其完整形式如下

numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)
  • object :数组或嵌套的数列
  • dtype :数组元素的数据类型,可选
  • copy :对象是否需要复制,可选
  • order :创建数组的样式,C为行方向,F为列方向,A为任意方向(默认)
  • subok:默认返回一个与基类类型一致的数组
  • ndmin:指定生成数组的最小维度
a = np.array([[1, 2, 3], [3, 4, 5], [5, 6, 7], [7, 8, 9]], dtype=complex)
print(a)

(2)其他创建方法

①:可以使用fill()方法将数组设定为指定值

  • 注意:如果fill()中传入的数据类型和原有数组中数据的类型不一致时,会向原有的类型发生转换
a = np.zeros(10, dtype=int)
a.fill(5)  # 全部填充为5
print(a)

(3)特殊数组创建方法

①:生成全0或全1的数组

  • 默认是浮点数,如果需要其他类型,使用dtype指定即可
a = np.zeros(5)  # 5个元素
b = np.ones(5, dtype=int)  # 5个元素
print(a)
print(b)


②:使用arange()生成整数序列,它会根据 startstop 指定的范围以及 step 设定的步长,生成一个 ndarray,它的基本格式如下

numpy.arange(start, stop, step, dtype)
  • start:起始值,默认为0
  • stop:终止值(不包含)
  • step:步长,默认为1
  • dtype:数据类型

比如

a = np.arange(0, 10, 2, int)
print(a)


③:使用linspace()生成等差数列,它的基本格式如下

np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)
  • start:序列的起始值
  • stop:序列的终止值,如果endpointtrue,该值包含于数列中
  • num:要生成的等步长的样本数量,默认为50
  • endpoint:该值为 true 时,数列中包含stop值,反之不包含,默认是True
  • retstep:如果为 True 时,生成的数组中会显示间距,反之不显示
  • dtype:数据类型

比如

a = np.linspace(1, 10, 10)
b = np.linspace(10, 20, 5, endpoint=False, dtype=int)  # 不包含终止值
print(a)
print(b)

④:使用random.rand()等函数生成随机数

  • 读者可自行查阅相关文档,探索更多的随机数生成方法
a = np.random.rand(5)
b = np.random.randn(5)  # 满足正态分布
c = np.random.randint(1, 10, 10)  # 10个随机整数
print(a)
print(b)
print(c)

二:数组属性

(1)N维数组-ndarray

NumPy最核心的数据类型是N维数组The N-dimensional array (ndarray),可以看成homogenous(同质) items的集合,与只密切相关的两种类型是Data type objects (dtype)Scalars

  • 数据类型对象(np.dtype):用来描述与数组对应的内存区域如何使用。比如数据的类型、大小等
  • NumPy数据类型(scalar types):上一节已有介绍

如下是常见的1维、2维、3维数组


Numpy操作的对象就是数组,也即ndarray,这一点可以通过type()验证

a = np.random.randint(1, 10, 10)  # 10个随机整数
print(type(a))

(2)轴的概念(axis)

Numpy数组的维数称之为秩(rank),秩表示轴的数量;在Numpy中每一个线性的数组称为一个轴(axis)

类似于笛卡尔坐标系,简单的二维坐标系只有 x x x轴和 y y y轴,使用它们可以平面空间中唯一确定一个位置


而Numpy中的轴指的就是行、列的方向

  • axis=0:表示沿着第 0 轴进行操作,即对每一列进行操作
  • axis=1:表示沿着第1轴进行操作,即对每一行进行操作

(3)ndarray属性

属性说明
ndarrary.ndim秩(轴的数量或者维度)
ndarray.shape数组的维度,对于矩阵,n 行 m 列
ndarray.size数组元素的总个数,相当于 .shape 中 n*m 的值
ndarray.dtypendarray 对象的元素类型
ndarray.itemsizendarray 对象中每个元素的大小,以字节为单位
ndarray.flagsndarray 对象的内存信息
ndarray.realndarray元素的实部
ndarray.imagndarray元素的虚部
a = np.zeros((3, 4, 2), dtype=int)  # 三维数组
print(a.ndim)
print(a.shape)
print(a.size)
print(a.dtype)
print(a.itemsize)
print(a.flags)

#  结果
3
(3, 4, 2)
24
int32
4
  C_CONTIGUOUS : True
  F_CONTIGUOUS : False
  OWNDATA : True
  WRITEABLE : True
  ALIGNED : True
  WRITEBACKIFCOPY : False
  UPDATEIFCOPY : False

另外注意flags 所列信息含义

三:索引和切片

  • 和Python中的list一样,ndarray对象的内容可以通过索引或切片来访问和修改

(1)基本操作

①:最基本的索引访问

a = np.random.randint(0, 10, size=[3, 3])  # 二维随机整数
print(a)
print(a[0])
print(a[0][2])

修改也是没有问题的

a = np.random.randint(0, 10, size=[3, 3])  # 二维随机整数
print(a)
a[0] = [9, 9, 9]
print(a)


②:切片可以通过start:stop:step来操作

a = np.random.randint(0, 10, size=[3, 3])  # 二维随机整数
print(a)
print(a[0:2:1])

同样支持负索引

a = np.random.randint(0, 10, size=[3, 3])  # 二维随机整数
print(a)
print(a[-2::1])

(2)高级操作

  • 暂略
创作挑战赛 新人创作奖励来咯,坚持创作打卡瓜分现金大奖

以上是关于(数据分析三板斧)第一斧Numpy-第二节:生成数组数组属性和切片的主要内容,如果未能解决你的问题,请参考以下文章

(数据分析三板斧)第一斧Numpy-第三节:索引和切片

(数据分析三板斧)第一斧Numpy-第三节:索引和切片再练习

(数据分析三板斧)第二斧Pandas-第二节:Pandas基本数据操作与运算

(数据分析三板斧)第三斧Matplotlib-第二节:以绘制折线图为例讲解Matplotlib绘图

Numpy总结第二节:Numpy 的属性与形状变换

第二节 hibernate session基本方法介绍