pytthon学习笔记4_组合数据类型和numpy矩阵类型


前言

  最近想要写一个简要的深度学习框架,里面将要运用到大量的数组运算,因此在此处复习一下组合数据类型和numpy矩阵,以便届时能够更加流利的书写相关代码。

一、组合数据类型

  Python语言中最常用的组合数据类型有三大类型,分别是集合类型序列类型映射类型
  集合类型是一个元素集合,元素之间无序,相同元素在集合中唯一存在。
   序列类型是一个元素向量,元素之间存在先后关系,通过序号访问,元素之间不排他。序列类型的典型代表是字符串类型和列表类型。
  映射类型是“键—值”数据项的组合,每一个元素是一个键值对,表示为(key,value)。映射类的典型表示是字典类型。

1.集合类型

  集合是无序组合,用大括号( { } )表示,他没有索引和位置的概念,集合中的元素可以动态增加或删除。
  集合中的元素不可重复,元素类型只能是不可变数据类型,例如整数、浮点数、字符串、元组等,相比较而言,列表、字典和集合类型本身都是可变数据类型,不能作为集合的元素出现。
在这里插入图片描述
  集合元素之间没有顺序,不能比较,不能排序。将集合类型看成数学中集合即可。以下是常用的集合操作。

操作符及运算描述
S-T返回一个新集合,包括在集合S中但是不在集合T中的元素
S&T返回一个新集合,包括同时在集合S和集合T中的元素
S^T返回一个新集合,包括同时在集合S和集合T中非共同的元素
SIT返回一个新集合,包括集合S和T中的所有元素

  集合类型的一些常用的操作函数和方法

函数或方法描述
S.add(x)如果数据项x不在集合S中,将x增加到S
S.remove()如果x在集合S中,移除该元素;不在则产生KeyError异常
S.clear()移除S中所有数据项
len(S)返回集合S中的元素个数
x in S如果x是S的元素,返回true;否则返回flase
x not in S如果x不是S中的元素,返回true;否则返回flase

  集合的最后一个重点内容:set()函数
  set(x)函数可以将其他的数据类型变成集合类型,返回结果是一个无重复且排序任意的集合。set()函数也可以生成空集合变量。其次集合类型可以用来去重。见如下:
在这里插入图片描述

2.序列类型

  序列类型是一维元素向量,元素之间存在先后关系,通过序号访问。如一维数组a[0],a[1],a[2]…通过下标访问特点值。
  其次讲一讲下序列类型的索引体系:

  • 与我们熟知的编程语言c,c++,java等一样序列类型的正向递增序号是从0开始的,
  • 但是python中增加了反向递减序列,从-1开始,下边-1代表倒数第一的元素,-2为导数第二依次类推直到第一个元素。
  • 举例:
    以序列类型的典型例子元组为例,元组类型在python语言中表示为tuple,一般以小括号和逗号进行组织(,,)

在这里插入图片描述
可知t[-3]已经是第一个数了,当下标取-4时,超出下标范围。


  常见的序列类型的操作符和函数:

操作符描述
x in s如果x是s的元素,返回True;否则返回False
x not in s如果x不是s的元素,返回True;否则返回 False
s+t连接s+t
sn或ns将序列s复制n次
s[i]索引,返回序列的第i个元素
s[i:j]切片,返回包含序列s第i到第j个元素的子序列(不包含第j个元素)
s[i:j:k]步骤切片,返回包含序列s第i到第j个元素以k为步数的子序列
len(s)序列s的元素个数
max(s)序列s中的最大元素
min(s)序列s中的最小元素
s.index序列s中第一次出现元素x的位置
s.count(s)序列s中出现x的总次数

元组其他重要知识点:

  • 元组类型一旦定义不可修改,元组类型的所有操作都可以通过列表类型实现,因此多数情况下都是使用列表(与元组不同的是,列表类型用中括号和逗号表示,下面具体讲)。
  • 元组类型主要在python语法相关的场景中使用,例如,当函数返回多个值时,多个返回值以元组类型返回,实际上返回一个数据类型。

除了元组类型外,序列类型中应用最为广泛,最为重要的就是列表类型了。列表类型用中括号表示[, , ,],也可以通过list(x)函数将集合或字符串类型转换成列表类型。list()函数也可以生成空列表。且由于列表是序列类型,上表的所有函数和操作列表都可以通用。

在这里插入图片描述

  此外列表还有其他的操作方法。

方法描述
Is.append(x)在列表Is最后增加一个元素x
Is.insert(i,x)在列表Is的第i个位置增加一个元素x
Is.clear()删除Is中的所有元素
Is.pop(i)将列表Is中第i项元素取出并从Is中删除该元素
Is.remove(x)将列表中出现的第一个元素x删除
Is.reverse()将列表中的元素进行反转
Is.copy()生成一个新列表,复制列表s中的所有元素

  此外还需注意的一点是列表的切片。

  • <列表和列表变量>[N:M]:切片获取列表类型从N到M(不包含M)的元素组成的新列表,其中N和M为列表类型的索引序号,可以正向可以反向,且当N>=M时返回空列表。
  • <列表和列表变量>[N:M:K]:切片获取列表类型从N到M(不包含M)以K为步长所对应元素组成的列表。
    在这里插入图片描述

3.映射类型

   映射类型是“键-值”数据项的组合,每个元素是一个键值对,即元素是(key,value),元素之间是无序的。
  典型的映射类型是字典。python语言中的字典使用大括号{ }建立,每个元素是一个键值对,通过键信息查找对应的值信息,这个过程就叫做映射。对应格式如下:
{<键1>:<值1>,<键2>:<值2>,<键3>:<值3>,<键4>:<值4>}
在这里插入图片描述
  其次使用大括号可以创建空字典。通过索引和赋值配合,可以向字典中增加元素。

在这里插入图片描述

  

  下面介绍字典的操作函数和操作方法。

操作函数描述
len(d)字典d的元素个数
min(d)字典d中的最小值
max(d)字典d中的最大值
dict()生成一个空字典
操作方法描述
d.keys()返回所有的键信息
d.values()返回所有的值信息
d.itens()返回所有的键值对信息
d.get(key,default)键存在则返回相应值,否则返回默认值
d.pop(key,default)键存在则返回相应值,同时删除键值对,否则返回默认值default
d.popitem()随机从字典中取出一个键值对,以元组(key,value)形式返回,同时将该键值对从字典中删除
d.clear()删除所有的键值对,清空字典

二、numpy矩阵

  Numpy是Python中科学计算的核心库。它提供了一个高性能的多维数组对象,以及用于处理这些数组的工具。如果你已经熟悉MATLAB,你可能会发现这篇教程对于你从MATLAB切换到学习Numpy很有帮助。

数组(Arrays)

numpy数组是一个值网格,所有类型都相同,并由非负整数元组索引。 维数是数组的排名; 数组的形状是一个整数元组,给出了每个维度的数组大小。

我们可以从嵌套的Python列表初始化numpy数组,并使用方括号访问元素:

import numpy as np

a = np.array([1, 2, 3])   # Create a rank 1 array
print(type(a))            # Prints "<class 'numpy.ndarray'>"
print(a.shape)            # Prints "(3,)"
print(a[0], a[1], a[2])   # Prints "1 2 3"
a[0] = 5                  # Change an element of the array
print(a)                  # Prints "[5, 2, 3]"

b = np.array([[1,2,3],[4,5,6]])    # Create a rank 2 array
print(b.shape)                     # Prints "(2, 3)"
print(b[0, 0], b[0, 1], b[1, 0])   # Prints "1 2 4"

其他定义数组方法:

import numpy as np

a = np.zeros((2,2))   # Create an array of all zeros
print(a)              # Prints "[[ 0.  0.]
                      #          [ 0.  0.]]"

b = np.ones((1,2))    # Create an array of all ones
print(b)              # Prints "[[ 1.  1.]]"

c = np.full((2,2), 7)  # Create a constant array
print(c)               # Prints "[[ 7.  7.]
                       #          [ 7.  7.]]"

d = np.eye(2)         # Create a 2x2 identity matrix
print(d)              # Prints "[[ 1.  0.]
                      #          [ 0.  1.]]"

e = np.random.random((2,2))  # Create an array filled with random values
print(e)                     # Might print "[[ 0.91940167  0.08143941]
                             #               [ 0.68744134  0.87236687]]"

numpy数组切片:

import numpy as np

# Create the following rank 2 array with shape (3, 4)
# [[ 1  2  3  4]
#  [ 5  6  7  8]
#  [ 9 10 11 12]]
a = np.array([[1,2,3,4], [5,6,7,8], [9,10,11,12]])

# Use slicing to pull out the subarray consisting of the first 2 rows
# and columns 1 and 2; b is the following array of shape (2, 2):
# [[2 3]
#  [6 7]]
b = a[:2, 1:3]

# A slice of an array is a view into the same data, so modifying it
# will modify the original array.
print(a[0, 1])   # Prints "2"
b[0, 0] = 77     # b[0, 0] is the same piece of data as a[0, 1]
print(a[0, 1])   # Prints "77"
import numpy as np

# Create the following rank 2 array with shape (3, 4)
# [[ 1  2  3  4]
#  [ 5  6  7  8]
#  [ 9 10 11 12]]
a = np.array([[1,2,3,4], [5,6,7,8], [9,10,11,12]])

# Two ways of accessing the data in the middle row of the array.
# Mixing integer indexing with slices yields an array of lower rank,
# while using only slices yields an array of the same rank as the
# original array:
row_r1 = a[1, :]    # Rank 1 view of the second row of a
row_r2 = a[1:2, :]  # Rank 2 view of the second row of a
print(row_r1, row_r1.shape)  # Prints "[5 6 7 8] (4,)"
print(row_r2, row_r2.shape)  # Prints "[[5 6 7 8]] (1, 4)"

# We can make the same distinction when accessing columns of an array:
col_r1 = a[:, 1]
col_r2 = a[:, 1:2]
print(col_r1, col_r1.shape)  # Prints "[ 2  6 10] (3,)"
print(col_r2, col_r2.shape)  # Prints "[[ 2]
                             #          [ 6]
                             #          [10]] (3, 1)"


  numpy数组的常用函数:

ndarray.ndim	#获取ndarray的维数
ndarray.shape	#获取ndarray各个维度的长度
ndarray.dtype	#获取ndarray中元素的数据类型
ndarray.T	#简单转置矩阵ndarray
项目Value
ndarray.ndim获取ndarray的维数
ndarray.shape获取ndarray各个维度的长度
ndarray.dtype获取ndarray中元素的数据类型
ndarray.T简单转置矩阵ndarray
函数作用
np.array( x)将输入数据转化为一个ndarray
np.array( x, dtype)将输入数据转化为一个类型为type的ndarray
np.asarray( array )将输入数据转化为一个新的(copy)ndarray
np.ones( N )生成一个N长度的一维全一ndarray
np.ones( N, dtype)生成一个N长度类型是dtype的一维全一ndarray
np.ones_like( ndarray )生成一个形状与参数相同的全一ndarray
np.zeros( N)生成一个N长度的一维全零ndarray
np.zeros( N, dtype)生成一个N长度类型位dtype的一维全零ndarray
np.zeros_like(ndarray)类似np.ones_like( ndarray )
np.empty( N )生成一个N长度的未初始化一维ndarray
np.empty( N, dtype)生成一个N长度类型是dtype的未初始化一维ndarray
np.empty_like(ndarray)类似np.ones_like( ndarray )
np.eye( N )/np.identity( N )
np.arange( num)生成一个从0到num-1步数为1的一维ndarray
np.arange( begin, end)生成一个从begin到end-1步数为1的一维ndarray
np.arange( begin, end, step)生成一个从begin到end-step的步数为step的一维ndarray
np.where(cond, ndarray1, ndarray2)根据条件cond,选取ndarray1或者ndarray2,返回一个新的ndarray
np.in1d(ndarray, [x,y,…])检查ndarray中的元素是否等于[x,y,…]中的一个,返回bool数组

三、参考文献

[1].全国计算机等级考试二级教程——python编程从入门到实践.高等教育出版社.2021
[2].链接:http://www.numpy.org.cn/article/basics/python_numpy_tutorial.html#python

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值