1.根据索引来获取元素
* 创建一个索引列表ind,用来装载索引,
当numpy数据是一维数据时:一个索引对应的是一个元素
具体的例子如下:

import numpy as np

# 数据是一维数据时:索引对应的是一个元素
x = np.array([10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120, 130, 140, 150, 160])
ind1 = [3, 5, 9]
print("根据一维索引获取对应元素的值,生成一维的numpy数据:", x[ind1], x[ind1].shape) ind2 = np.array([[0, 2],
[1, 3]])
print("根据二维索引获取对应元素的值,生成二维的numpy数据", x[ind2], x[ind2].shape) ind3 = np.array([[0, 1],
[2, 3],
[4, 5]])
print("根据三维索引获取对应元素的值,生成三维的numpy数据", x[ind3], x[ind3].shape)

* 当numpy数据是多维数据时:一个索引对应的是一行元素,可以通过两个索引来获取第a行,第b列的元素
* 对于一个m*n维的数据,可以通过reshape来改变它的形状,变成i * j维。其中m * n = i * j

import numpy as np
# 数据是多维数据时:【1】【3】对应的是第一行,第三列的数据
x = x.reshape(4, -1) # 将数据变成4行,-1表示任意列,自动计算
row = np.array([[0, 1, 2]]) # 表示只获取第0,1,2行
print(x[row]) col = [0, 1, 2]
print("取第row行,第col列", x[row, col]) # 表示获取第(0,0),(1,1),(2,2)的数据
print(x[:2, col]) col2 = [True, False, True, True] # 表示除了第二列之外,其他的都是True,也就是说在取值时,不取false的
print(x[0:2, col2])
# numpy中用于统计的方法: # 统计 x < 30的个数
print('统计 x < 30的个数', np.count_nonzero(x < 30))
# np.any 只要有一个满足后面的条件就会返回True
# np.all() 所有元素满足后面的条件就会返回True
print(np.any(x == 50))
print(np.all(x == 50)) # np.sum统计x%25==0的个数,其中axis=0表示按列看,axis=1表示按行看
print(np.sum(x % 25 == 0, axis=1)) # 创建其他array数据的方法: # 其他创建array的方法
a = np.zeros(10, dtype=int)
print(a) b = np.zeros(shape=(3, 5), dtype=float)
print(b) c = a.reshape(2, 5)
print(c) d = np.ones(shape=(3, 5), dtype=int) # 如果要生成一个指定数字的数组
e = np.full(shape=(3, 5), fill_value=222, dtype=float)
print(e) # 生成一个0-10里,间隔为0.2的array
f = np.arange(0, 10, 0.2)
print(f)
# linspace(),将0-20划分十个等距的数值
g = np.linspace(0, 20, 10)
print(g) # random, size表示生成的形状,size=(3, 5)表示3行5列
number = np.random.randint(0, 10, size=10)
number2 = np.random.randint(0, 10, size=(3, 5))
print(number2) # 计算机中的生成随机数机器都是伪随机数,是根据生成随机数的算法来执行生成的
# 如果生成种子一样的话,那么那你执行多少次结果都是一样的
np.random.seed(223)
number4 = np.random.randint(0, 10, size=4)
print(number4) # 生成浮点数的随机数size可以是一个整数,也可以是一个元祖
num = np.random.random(size=(3, 5))
print(num) # 生成服从正态分布的随机数0是均值,1是方差
number5 = np.random.normal(0, 1, size=(3, 5))
print(number5)

### 2.numpy的基本操作
* 主要包含对数据进行reshape,合并操作,分割操作
先讲一下一些基本知识,便于理解代码。
* 假设x是一个一维的数据,里面有100个元素,通过x.reshape(10,-1),则它会将数据变成10行,-1表示不用管它,让计算机自己计算有多少列,例如这里生成100/10=10列,==在这里要注意,我们总元素/行数=整数,才行。==
例如有100个数据,想要x = x.reshape(3,-1)是不行的,因为100/3 != 整数

* 例如x= np.array([1,1,1],[2,2,2]),
x=x[:,:]表示取所有行所有列,冒号表示取所有

import numpy as np
x = np.arange(15).reshape(3, 5)
print(x) # 获取数组中的某个元素
number = x[2, 3]
print(number)
# 若果向获取某一行或者某一列
number2 = x[:2]
print(number2)
number3 = x[:, :3]
print(number3) # 获取步长为2的元素
number4 = x[:, ::2 ]
print(number4) # 如果你去x的一个子集,然后对子集修改,原来的集合也会被修改
# 如果我们想获取一个独立的子集
subx = x[:2, :3].copy() # 如果想讲一个数据修改成15行,列不管
# 如果有100条数据,则变成5行20列
num = x.reshape(5, -1)
print(num)

* 合并操作

# 合并操作
x = np.array([1, 2, 3])
y = np.array([3, 2, 1]) a = np.concatenate([x, y])
print(a)
z = np.array([[0, 0, 0],
[1, 1, 1]])
q = np.full(shape=(2, 2), fill_value=100) b = np.vstack([x, z]) # 在垂直方向叠加
print(b) c = np.hstack([z, q]) # 在水平方向叠加
print(c)

* 分割操作

# 分割操作
x = np.arange(10)
# 3和7是分割的地方
x1, x2, x3 = np.split(x, [3, 7])
print(x1, x2, x3) y2 = np.arange(16).reshape(4, 4)
# axis=0按行分割
v1, v2 = np.split(y2, [2], axis=0)
upper, lower = np.vsplit(y2, [2]) # np.vsplit上下对称, np.hsplit左右对称
print(upper)

### 3.矩阵的操作

import numpy as np
# numpy对数组支持加减乘除,幂运算,求余
# 对矩阵里面的每个元素乘以2
l = np.arange(20)
a = 2 * l
print(a) # 对矩阵
"""求绝对值abs
正弦sin,余弦cos,正切tan
在numpy中log函数默认以e为底
log2(x)"""
print(np.log(2.7)) matrix_a = np.arange(4).reshape(2, 2)
matrix_b = np.full(shape=(2, 2), fill_value=10) print(matrix_a * matrix_b) # 对应位置的元素相乘,但这并不符合数学上的矩阵的乘法
print(matrix_a.dot(matrix_b)) # 这个才符合矩阵的乘法 matrix_c = np.arange(6).reshape(2, 3)
print(matrix_a.dot(matrix_c)) # 向量和矩阵做加法
v = np.array([1, 2])
print(v + matrix_a) # 矩阵求逆
inv_a = np.linalg.inv(matrix_a)
print(inv_a) # 有一些矩阵不能求逆矩阵,所以我们求伪逆矩阵
pinx = np.linalg.pinv(matrix_a)
print(pinx)

### 4.聚合操作

import numpy as np

a = np.arange(100)
# 求和
print(np.sum(a)) # sum与python中的sum在效率上快很多
print(np.max(a)) x = np.arange(16).reshape(4, 4)
print(np.sum(x, axis=0)) # 平均值
print(np.mean(x))
# 中位数
print(np.median(x))
# 所有元素的乘积
print(np.prod(x)) # 方差
print(np.std(x))

### 5. 获取索引的值

import numpy as np

x = np.random.normal(0, 1, size=10000)
print(np.argmin(x)) # 获取最小值的索引值,通过x[索引】可以查找元素 # 排序和索引
y = np.array([1, 5, 6, 8, 8, 2, 3, 9, 11])
print(np.sort(y, axis=0)) # 通过这样y不会改变顺序,如果想要改变y的话,可以用y.sort() z = np.arange(5)
np.random.shuffle(z) # 打乱原来的排序
print(z)
print("输出的是0, 1, 2, 3, 4的索引", np.argsort(z)) # 支出最小值到最大值在z中的索引

(零)机器学习入门与经典算法之numpy的基本操作的更多相关文章

  1. 机器学习入门:K-近邻算法

    机器学习入门:K-近邻算法 先来一个简单的例子,我们如何来区分动作类电影与爱情类电影呢?动作片中存在很多的打斗镜头,爱情片中可能更多的是亲吻镜头,所以我们姑且通过这两种镜头的数量来预测这部电影的主题. ...

  2. 机器学习10种经典算法的Python实现

    广义来说,有三种机器学习算法 1. 监督式学习 工作机制:这个算法由一个目标变量或结果变量(或因变量)组成.这些变量由已知的一系列预示变量(自变量)预测而来.利用这一系列变量,我们生成一个将输入值映射 ...

  3. 机器学习入门KNN近邻算法(一)

    1 机器学习处理流程: 2 机器学习分类: 有监督学习 主要用于决策支持,它利用有标识的历史数据进行训练,以实现对新数据的表示的预测 1 分类 分类计数预测的数据对象是离散的.如短信是否为垃圾短信,用 ...

  4. 【机器学习】机器学习入门01 - kNN算法

    0. 写在前面 近日加入了一个机器学习的学习小组,每周按照学习计划学习一个机器学习的小专题.笔者恰好近来计划深入学习Python,刚刚熟悉了其基本的语法知识(主要是与C系语言的差别),决定以此作为对P ...

  5. 机器学习10大经典算法.doc

    详见 F:\工程硕士\d电子书\26 数据挖掘 小结: 1. C4.5 C4.5算法是机器学习算法中的一种分类决策树算法,其核心算法是ID3算法.  C4.5算法继承了ID3算法的优点,并在以下几方面 ...

  6. 机器学习入门-DBSCAN聚类算法

    DBSCAN 聚类算法又称为密度聚类,是一种不断发张下线而不断扩张的算法,主要的参数是半径r和k值 DBSCAN的几个概念: 核心对象:某个点的密度达到算法设定的阈值则其为核心点,核心点的意思就是一个 ...

  7. Python3入门机器学习经典算法与应用☝☝☝

    Python3入门机器学习经典算法与应用 (一个人学习或许会很枯燥,但是寻找更多志同道合的朋友一起,学习将会变得更加有意义✌✌) 使用新版python3语言和流行的scikit-learn框架,算法与 ...

  8. Python3入门机器学习经典算法与应用

    <Python3入门机器学习经典算法与应用> 章节第1章 欢迎来到 Python3 玩转机器学习1-1 什么是机器学习1-2 课程涵盖的内容和理念1-3 课程所使用的主要技术栈第2章 机器 ...

  9. Python3入门机器学习经典算法与应用✍✍✍

    Python3入门机器学习经典算法与应用 整个课程都看完了,这个课程的分享可以往下看,下面有链接,之前做java开发也做了一些年头,也分享下自己看这个视频的感受,单论单个知识点课程本身没问题,大家看的 ...

随机推荐

  1. [Vue]写一个简单的文件上传控件

    ​这篇将介绍如何写一个简单的基于Vue+Element的文件上传控件. 控件将具有 1. 上传队列的列表,显示文件名称,大小等信息,可以显示上传进度实时刷新 2. 取消上传 ​ 使用Element的u ...

  2. MySQL进阶之表的增删改查

    我的小站 修改表名 ALTER TABLE student RENAME TO stu; TO可以省略. ALTER TABLE 旧表名 RENAME 新表名; 此语句可以修改表的名称,其实一般我们在 ...

  3. Java语言的词法分析器的Java实现

    一.实验目的 1. 学会针对DFA转换图实现相应的高级语言源程序. 2. 深刻领会状态转换图的含义,逐步理解有限自动机. 3. 掌握手工生成词法分析器的方法,了解词法分析器的内部工作原理. 二.实验内 ...

  4. Windows与Linux如何实现相互远程桌面连接?

    今天跟大家一起讨论下,利用Windows自带的远程桌面连接工具,实现远程Linux桌面及在Linux系统中远程Windows桌面 一.Windows远程Linux桌面 1)本次实验以CentOS 7. ...

  5. Nginx的常用配置

    Nginx配置文件结构 设置worker进程的用户,指的linux中的用户,会涉及到nginx操作目录或文件的一些权限,默认为 nobodyuser root; worker进程工作数设置,一般来说C ...

  6. vue - Vue中的ajax

    只有在ajax才能找回一点点主场了,vue中的ajax一天整完,内容还行,主要是对axios的运用. 明天按理说要开始vuex了,这个从来都是只耳闻没有眼见过,明天来看看看看是个什么神奇的东西. 一. ...

  7. Golang 函数 方法 接口的简单介绍

    函数 函数是基本的代码块,通常我们会将一个功能封装成一个函数,方便我们调用,同时避免代码臃肿复杂. 函数的基本格式 func TestFunc(a int, b string) (int, strin ...

  8. Redis设计与实现2.2:数据持久化

    数据持久化 这是<Redis设计与实现>系列的文章,系列导航:Redis设计与实现笔记 RDB持久化 RDB 持久化功能所生成的 RDB 文件是一个经过压缩的二进制文件,通过该文件可以还原 ...

  9. 标注工具doccano导出数据为空的解决办法

    地址:https://github.com/taishan1994/doccano_export doccano_export 使用doccano标注工具同时导出实体和关系数据为空的解决办法.docc ...

  10. 好客租房49-组件的props(特点)

    特点 1可以给组件传递任意类型的数据 2props是只读的对象 只能读取属性的值 无法修改对象 3注意:使用类组件时 如果写了构造函数 应该将props传递给super() 否则 无法在构造函数 中获 ...