(数据分析三板斧)第一斧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()
生成整数序列,它会根据 start
与 stop
指定的范围以及 step
设定的步长,生成一个 ndarray
,它的基本格式如下
numpy.arange(start, stop, step, dtype)
start
:起始值,默认为0stop
:终止值(不包含)step
:步长,默认为1dtype
:数据类型
比如
a = np.arange(0, 10, 2, int)
print(a)
③:使用linspace()
生成等差数列,它的基本格式如下
np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)
start
:序列的起始值stop
:序列的终止值,如果endpoint
为true
,该值包含于数列中num
:要生成的等步长的样本数量,默认为50endpoint
:该值为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.dtype | ndarray 对象的元素类型 |
ndarray.itemsize | ndarray 对象中每个元素的大小,以字节为单位 |
ndarray.flags | ndarray 对象的内存信息 |
ndarray.real | ndarray元素的实部 |
ndarray.imag | ndarray元素的虚部 |
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-第三节:索引和切片再练习
(数据分析三板斧)第二斧Pandas-第二节:Pandas基本数据操作与运算