文章目录

  • 1 创建数组知多少
    • 1.1 np.array
    • 1.2 np.arange
    • 1.3 np.random.randint
    • 1.4 特殊函数
  • 2 数组数据类型
    • 2.1 指定&查看数据类型
    • 2.2 修改数据类型
  • 3 形状操作
    • 3.1 查询维度&形状
    • 3.2 修改形状
    • 3.3 数组叠加
      • 3.3.1 垂直叠加
      • 3.3.2 水平叠加
    • 3.4 数组切割
      • 3.4.1 numpy.vsplit
      • 3.4.2 numpy.hsplit
      • 3.4.3 按列&按行平均切割
    • 3.5 矩阵转置
    • 3.6 元素个数&所占内存
  • 4 索引&切片
    • 4.1 一维数组
    • 4.2 二维数组
    • 4.3 布尔索引
  • 5 元素值的替换
    • 5.1 索引&切片
    • 5.2 条件索引
    • 5.3 numpy.where
  • 6 广播机制
    • 6.1 数组与数字
    • 6.2 数组与数组
      • 6.2.1 形状一致
      • 6.2.2 行数1&列数相等
      • 6.2.3 列数1&行数相等
  • 7 文件操作
    • 7.1 操作CSV文件
      • 7.1.1 文件保存
      • 7.1.2 读取文件
  • 8 NAN&INF
    • 8.1 简介

1 创建数组知多少

1.1 np.array

import numpy as nparr = np.array([[1,2,3],[4,5,6]])
print(arr)
print(type(arr))arr = [np.random.randint(0, 10) for i in range(0, 10)]
print(np.array(arr))arr = np.array([np.random.random() for i in range(0, 10)])
print(arr.reshape(2,5))
[[1 2 3][4 5 6]]
<class 'numpy.ndarray'>
[8 1 0 4 7 2 0 5 8 9]
[[0.62979704 0.81936423 0.85718357 0.44829291 0.25603124][0.53717736 0.63534766 0.52938686 0.11660057 0.18793128]]

1.2 np.arange

arr = np.arange(10)
print(arr)arr = np.arange(1, 10)
print(arr)arr = np.arange(1, 10, 2)
print(arr)
[0 1 2 3 4 5 6 7 8 9]
[1 2 3 4 5 6 7 8 9]
[1 3 5 7 9]

1.3 np.random.randint

arr = np.random.randint(0, 10, size=(2, 5))
print(arr)
[[3 3 3 6 5][6 2 7 1 3]]

1.4 特殊函数

# np.zeros((row, col))
arr = np.zeros((3,3))
print(arr)
[[0. 0. 0.][0. 0. 0.][0. 0. 0.]]
# np.ones((row, col))
arr = np.ones((5,5))
print(arr)
[[1. 1. 1. 1. 1.][1. 1. 1. 1. 1.][1. 1. 1. 1. 1.][1. 1. 1. 1. 1.][1. 1. 1. 1. 1.]]
# np.full((row, col), value)
arr = np.full((2, 4), 9)
print(arr)arr = np.full((3, 2), 'w')
print(arr)
[[9 9 9 9][9 9 9 9]]
[['w' 'w']['w' 'w']['w' 'w']]
# np.eye(row:int)
# 生成单位矩阵
arr = np.eye(3)
print(arr)
[[1. 0. 0.][0. 1. 0.][0. 0. 1.]]

2 数组数据类型

2.1 指定&查看数据类型

import numpy as np
arr = np.array([1,2,3,4,5])
print(arr.dtype)
arr = np.array([1,2,3,4,5], dtype='i1')
print(arr.dtype)
int32
int8

2.2 修改数据类型

arr = np.array([1,2,3,4])
print(arr)
print(arr.dtype)arr = arr.astype('float32')
print(arr)
print(arr.dtype)
[1 2 3 4]
int32
[1. 2. 3. 4.]
float32

3 形状操作

3.1 查询维度&形状

import numpy as np
arr = np.arange(8)
print(arr.ndim)
print(arr.shape)arr = np.array([[1,2,3],[4,5,6]])
print(arr.ndim)
print(arr.shape)arr = np.array([[[1,1,1],[1,1,1]], [[1,1,1],[1,1,1]]])
print(arr.ndim)print(arr.shape)
print(arr.shape[0])
print(arr.shape[1])
print(arr.shape[2])
1
(8,)
2
(2, 3)
3
(2, 2, 3)
2
2
3

3.2 修改形状

import numpy as np
arr = np.arange(10)
# 1 原来模样
print('一、原来摸样')
print(arr, '\n')# 2 逢场作戏
print('二、array.reshape逢场作戏')
print(arr.reshape(2,5))
print('    依旧是没事人')
print(arr, '\n')# 3 真枪实干
print('三、array.shape真枪实干')
arr.shape = (5, 2)
print(arr, '\n')print('四、array.resize真枪实干')
arr.resize(2,5)
print(arr, '\n')# 4 将数组压平
print('五、array.flatten压平乐')
aa = arr.flatten()
print('这是array.flatten返回结果的拷贝,对其修改不会影响原数组')
aa[0] = 10
print(aa, '\n')
print('原数组\n', arr, '\n')print('六、arr.ravel压平勒')
bb = arr.ravel()
print('这是array.ravel返回的视图,对其修改会影响原数组')
bb[0] = 11
print(bb, '\n')
print('原数组\n', arr, '\n')
一、原来摸样
[0 1 2 3 4 5 6 7 8 9] 二、array.reshape逢场作戏
[[0 1 2 3 4][5 6 7 8 9]]依旧是没事人
[0 1 2 3 4 5 6 7 8 9] 三、array.shape真枪实干
[[0 1][2 3][4 5][6 7][8 9]] 四、array.resize真枪实干
[[0 1 2 3 4][5 6 7 8 9]] 五、array.flatten压平乐
这是array.flatten返回结果的拷贝,对其修改不会影响原数组
[10  1  2  3  4  5  6  7  8  9] 原数组[[0 1 2 3 4][5 6 7 8 9]] 六、arr.ravel压平勒
这是array.ravel返回的视图,对其修改会影响原数组
[11  1  2  3  4  5  6  7  8  9] 原数组[[11  1  2  3  4][ 5  6  7  8  9]]

3.3 数组叠加

3.3.1 垂直叠加

# 垂直叠加列数需相同
import numpy as np
v1 = np.random.randint(0, 10, size=(3, 4))
v2 = np.random.randint(0, 10, size=(2, 4))
print(v1, '\n')
print(v2, '\n')v3 = np.vstack([v1, v2])
print(v3, '\n')v3 = np.concatenate([v2, v1], axis=0)
print(v3)v1 = np.eyes(3)
v2 = np.
[[3 8 9 3][2 9 5 2][0 2 6 5]] [[9 5 6 5][7 1 5 8]] [[3 8 9 3][2 9 5 2][0 2 6 5][9 5 6 5][7 1 5 8]] [[9 5 6 5][7 1 5 8][3 8 9 3][2 9 5 2][0 2 6 5]]

3.3.2 水平叠加

# 水平叠加行数需相同
import numpy as np
h1 = np.random.randint(0, 10, size=(4,3))
h2 = np.random.randint(0, 10, size=(4,2))print(h1, '\n')
print(h2, '\n')h3 = np.hstack([h1, h2])
print(h3, '\n')
h3 = np.concatenate([h2,h1], axis=1)
print(h3, '\n')
[[2 3 4][8 4 9][1 2 6][0 7 9]] [[2 8][1 4][4 3][8 8]] [[2 3 4 2 8][8 4 9 1 4][1 2 6 4 3][0 7 9 8 8]] [[2 8 2 3 4][1 4 8 4 9][4 3 1 2 6][8 8 0 7 9]]
print('数组压平后,拼接')
h1 = np.eye(3)
h2 = np.random.randint(0, 10, size=(3, 3))
h3 = np.concatenate([h1,h2], axis=None)
print(h1, '\n')
print(h2, '\n')print(h3)
数组压平后,拼接
[[1. 0. 0.][0. 1. 0.][0. 0. 1.]] [[6 1 5][9 6 4][9 4 2]] [1. 0. 0. 0. 1. 0. 0. 0. 1. 6. 1. 5. 9. 6. 4. 9. 4. 2.]

3.4 数组切割

3.4.1 numpy.vsplit

垂直叠加的逆运算

import numpy as npvs1 = np.random.randint(0, 10, size=(4, 3))
print(vs1, '\n')# 指定分割成几份
print('按行分割,指定平均分割成四份')
vs2, vs3, vs4, vs5 = np.vsplit(vs1, 4)
print(vs2, '\n')
print(vs3, '\n')
print(vs4, '\n')
print(vs5, '\n')# 指定分割处的下标值
print('在1,2行前各划一刀')
vs2, vs3, vs4 = np.vsplit(vs1, (1, 2))
print(vs2, '\n')
print(vs3, '\n')
print(vs4, '\n')
[[6 5 7][9 8 1][0 4 5][1 3 1]] 按行分割,指定平均分割成四份
[[6 5 7]] [[9 8 1]] [[0 4 5]] [[1 3 1]] 在1,2行各划一刀
[[6 5 7]] [[9 8 1]] [[0 4 5][1 3 1]]

3.4.2 numpy.hsplit

水平叠加的逆运算

import numpy as nphs1 = np.random.randint(0, 10, size=(3, 4))
print(hs1, '\n')# 指定分割成几份
print('按列分割,指定平均分割成两份')
hs2, hs3 = np.hsplit(hs1, 2)
print(hs2, '\n')
print(hs3, '\n')# 指定分割处的下标值
print('在1,2列前各划一刀')
hs2, hs3, hs4 = np.hsplit(hs1, (1, 2))
print(hs2, '\n')
print(hs3, '\n')
print(hs4)
[[6 1 4 8][5 7 0 4][5 6 6 3]] 按列分割,指定平均分割成两份
[[6 1][5 7][5 6]] [[4 8][0 4][6 3]] 在1,2列前各划一刀
[[6][5][5]] [[1][7][6]] [[4 8][0 4][6 3]]

3.4.3 按列&按行平均切割

import numpy as nphs1 = np.random.randint(0,10,size=(3, 4))
print(hs1, '\n')
hs2, hs3, hs4, hs5 = np.split(hs1, 4, axis=1)
print(hs2, '\n')
print(hs3, '\n')
print(hs4, '\n')
print(hs5)
[[7 8 7 2][0 4 8 1][1 1 7 2]] [[7][0][1]] [[8][4][1]] [[7][8][7]] [[2][1][2]]
import numpy as npvs1 = np.random.randint(0,10,size=(3,4))
print(vs1, '\n')
vs2,vs3,vs4 = np.split(vs1, 3, axis=0)
print(vs2, '\n')
print(vs3, '\n')
print(vs4)
[[5 5 0 1][9 6 8 5][3 0 2 2]] [[5 5 0 1]] [[9 6 8 5]] [[3 0 2 2]]

3.5 矩阵转置

arr = np.random.randint(0,10,size=(3,4))
print(arr, '\n')print(arr.T)
[[6 0 7 3][8 2 4 4][6 1 7 5]] [[6 8 6][0 2 1][7 4 7][3 4 5]]
print(arr, '\n')arr1 = arr.transpose()
arr1[1,2] = 10
print(arr1, '\n')
print(arr)
[[6 0 7 3][8 2 4 4][6 1 7 5]] [[ 6  8  6][ 0  2 10][ 7  4  7][ 3  4  5]] [[ 6  0  7  3][ 8  2  4  4][ 6 10  7  5]]

3.6 元素个数&所占内存

import numpy as np
arr = np.array([[[1, 2, 3],[3, 4, 5]],[[7, 8, 9],[10,11,12]]
])
# 元素个数
print('元素个数:', arr.size)
# 各元素所占内存
print('各元素所占内存:', arr.itemsize)
# 数组所占内存
print('数组所占内存:', arr.size * arr.itemsize)
元素个数: 12
各元素所占内存: 4
数组所占内存: 48

4 索引&切片

4.1 一维数组

import numpy as np
arr = np.arange(10)print(arr)# 完整数组print(arr[1])# 索引print(arr[-2])# 倒着索引print(arr[1: 5])# 切片print(arr[: : 2])# 设置步长print(arr[9:0:-1])# 倒着切片
[0 1 2 3 4 5 6 7 8 9]
1
8
[1 2 3 4]
[0 2 4 6 8]
[9 8 7 6 5 4 3 2 1]

4.2 二维数组

import numpy as np
arr = np.random.randint(0, 10, size=(3, 4))print(arr) # 原数组
[[3 0 9 5][0 5 4 2][3 8 3 0]]
# 默认所有列
print(arr[0], '\n')   # 获取单行
print(arr[[0,1]])     # 获取多行
[3 0 9 5] [[3 0 9 5][0 5 4 2]]
print(arr[0,1], '\n')         # 获取指定位置的元素
print(arr[[0,1],[1,2]], '\n') # 0,1行与1,2列交叉处
print(arr[1:, 1:3], '\n')     # 1行及之后的行与1列到3列之前的交叉
print(arr[[0,1],:], '\n')     # 0,1行所有列
print(arr[:,[1,2]])           # 1,2列所有行
0 [0 4] [[5 4][8 3]] [[3 0 9 5][0 5 4 2]] [[0 9][5 4][8 3]]

4.3 布尔索引

import numpy as np
arr = np.arange(10).reshape(2,5)
print(arr, '\n')
print(arr[arr>5])
[[0 1 2 3 4][5 6 7 8 9]] [6 7 8 9]
import numpy as np
arr = np.arange(20).reshape(4,5)
print(arr, '\n')
print(arr[(arr>6) & (arr<15)]) # 条件多的时候,圆括号,&表示且,|表示或
[[ 0  1  2  3  4][ 5  6  7  8  9][10 11 12 13 14][15 16 17 18 19]] [ 7  8  9 10 11 12 13 14]

5 元素值的替换

5.1 索引&切片

import numpy as np
arr = np.arange(10)
print(arr, '\n')arr[1] = 7
print(arr, '\n')arr[1:] = 0
print(arr, '\n')
[0 1 2 3 4 5 6 7 8 9] [0 7 2 3 4 5 6 7 8 9] [0 0 0 0 0 0 0 0 0 0]
import numpy as np
arr = np.arange(20).reshape(4, 5)
print(arr, '\n')arr[0] = np.zeros((1, 5)) # 列数要相等
print(arr)
[[ 0  1  2  3  4][ 5  6  7  8  9][10 11 12 13 14][15 16 17 18 19]] [[ 0  0  0  0  0][ 5  6  7  8  9][10 11 12 13 14][15 16 17 18 19]]

5.2 条件索引

import numpy as np
arr = np.arange(20).reshape(4, 5)
print(arr, '\n')# 小试牛刀,将数组中小于11的元素全都替换为1
arr[arr < 11] = 1
print(arr)
[[ 0  1  2  3  4][ 5  6  7  8  9][10 11 12 13 14][15 16 17 18 19]] [[ 1  1  1  1  1][ 1  1  1  1  1][ 1 11 12 13 14][15 16 17 18 19]]

5.3 numpy.where

import numpy as np
arr = np.arange(20).reshape(4,5)
# 小试牛刀,将数组中小于10的元素替换为0,其余替换为1
res = np.where(arr<10, 0, 1)
print(res)
[[0 0 0 0 0][0 0 0 0 0][1 1 1 1 1][1 1 1 1 1]]

6 广播机制

6.1 数组与数字

import numpy as np
arr = np.arange(10).reshape(2,5)print(arr,'\n')
print(arr*2, '\n')
[[0 1 2 3 4][5 6 7 8 9]] [[ 0  2  4  6  8][10 12 14 16 18]]

6.2 数组与数组

6.2.1 形状一致

import numpy as np# 数组形状需一致
a1 = np.random.randint(0, 10, size=(3,4))
a2 = np.random.randint(0, 10, size=(3,4))
print(a1, '\n')
print(a2, '\n')
print(a1 + a2, '\n')
[[3 3 0 1][4 7 1 8][6 1 4 1]] [[1 9 9 0][3 4 7 1][6 6 0 2]] [[ 4 12  9  1][ 7 11  8  9][12  7  4  3]]

6.2.2 行数1&列数相等

a1 = np.random.randint(0,10,size=(3,4))
a2 = np.arange(4)
print(a1, '\n')
print(a2, '\n')
print(a1 + a2, '\n')
[[0 7 2 6][4 3 2 0][2 3 5 9]] [0 1 2 3] [[ 0  8  4  9][ 4  4  4  3][ 2  4  7 12]]

6.2.3 列数1&行数相等

a1 = np.random.randint(0,10,size=(3,4))
a2 = np.arange(3).reshape(3,1)
print(a1, '\n')
print(a2, '\n')
print(a1 + a2)
[[0 7 4 2][0 0 6 1][9 7 5 0]] [[0][1][2]] [[ 0  7  4  2][ 1  1  7  2][11  9  7  2]]

7 文件操作

7.1 操作CSV文件

7.1.1 文件保存

numpy.savetxt(frame, array, fmt='%.18e', delimiter='', newline='n', footer='', comments='#')
  • frame :文件或文件句柄
  • array :一维或二维数组
  • fmt :格式序列
  • delimiter :分隔符
  • newline :换行符
  • header :写在文件开头
  • footer :写在文件末尾
  • comments :header和footer的标记
import numpy as npscores = np.random.randint(0,100,size=(10,2))np.savetxt('score.csv', scores, fmt='%d', delimiter=',', header='English,Math', comments='')

7.1.2 读取文件

numpy.loadtxt(frame, dtype=np.float, delimiter='', uppack=False)
  • frame
  • dtype
  • dlimiter
  • uppack
b = np.loadtxt('score.csv', dtype=np.int, delimiter=',', )

8 NAN&INF

8.1 简介

NAN:Not A Number,虽然不是一个数,但是它是浮点类型

INF:Infinity,无穷大。np.inf表示无穷大,-np.inf表示负无穷大

import numpy as np
print(np.NAN != np.NAN) # NAN与NAN不相等print(np.NAN + 2)       # 与任何值做运算
True
nan

【机器学习基础】numpy 简称 np相关推荐

  1. 机器学习基础 --- numpy的基本使用

    一.numpy的简介 numpy是Python的一种开源的数值计算扩展库.这种工具可用来存储和处理大型矩阵,比Python自身的嵌套列表(nested list structure)结构要高效的多(该 ...

  2. python机器学习基础--numpy库

    目录 numpy库 数据维度的python表示 数组对象ndarray 数组创建与变换 数组变换 数组操作 数组运算 numpy数据存取 csv文件存储 案例1:使用下面代码生成一个csv文件[^1] ...

  3. 机器学习笔记(一)numpy的使用、机器学习基础概念

    目录 1.numpy 1.1.创建 numpy.array 1.1.1.常规创建 numpy.array 的方法 1.1.2.其他创建 numpy.array 的方法 1.1.2.其他创建随机数 ra ...

  4. 【机器学习基础】数学推导+纯Python实现机器学习算法25:CatBoost

    Python机器学习算法实现 Author:louwill Machine Learning Lab 本文介绍GBDT系列的最后一个强大的工程实现模型--CatBoost.CatBoost与XGBoo ...

  5. 集成学习(上):机器学习基础task1-熟悉机器学习的三大主要任务

    机器学习基础task1-熟悉机器学习的三大主要任务 1.导论 1.1 回归 1.2 分类 1.3 无监督学习 学习内容来源链接 1.导论 什么是机器学习?机器学习的一个重要的目标就是利用数学模型来理解 ...

  6. Python机器学习基础篇二《监督学习》

    前言 前期回顾: Python机器学习基础篇一<为什么用Python进行机器学习> 前面说过,监督学习是最常用也是最成功的机器学习类型之一.本章将会详细介绍监督学 习,并解释几种常用的监督 ...

  7. 集成学习(上)机器学习基础

    集成学习(上)机器学习基础 1.机器学习概念 1.1 机器学习的重要的目标 利用数学模型来理解数据,发现数据中的规律,用作数据的分析和预测. 1.2 机器学习分类 1.机器学习的任务可分为:有监督学习 ...

  8. 机器学习基础 HMM模型(隐马尔科夫)

    文章目录 一.马尔科夫链 1. 简介 2. 经典举例 3. 小结 二.HMM简介 1. 简单案例 2. 三个基本问题 三.HMM模型基础 1. 什么样的问题需要HMM模型 2. HMM模型的定义 3. ...

  9. 龙珠机器学习训练营机器学习基础知识笔记

    本学习笔记为阿里云天池龙珠计划机器学习训练营的学习内容,学习链接为:添加链接描述 学习知识点概要 1.了解 逻辑回归 的理论 2.掌握 逻辑回归 的 sklearn 函数调用使用并将其运用到鸢尾花数据 ...

最新文章

  1. c语言结构体如何定义字母,c语言中定义结构体如何定义?
  2. 内存分配的原理__进程分配内存有两种方式,分别由两个系统调用完成:brk和mmap(不考虑共享内存)
  3. 借助 CORS 从 JavaScript 使用 API 应用
  4. OpenCV中IplImage/CvMat/Mat转化关系
  5. 看了这几幅图,感觉自己物理白学了!
  6. #leetcode刷题之路35-搜索插入位置
  7. python 速度 memmap_从20秒到0.5秒:一个使用Rust语言来优化Python性能的案例
  8. Burpsuite Web渗透-扫描工具(中间攻击,渗透大牛都用来修改包和监视包)
  9. 无法移动或重命名“Documents and Settings”文件夹
  10. 机器学习/深度学习测试题(一) —— 单层感知器的激活函数
  11. oracle国家字符集
  12. 深度学习:摩尔纹识别(翻拍检测)
  13. STM32 485通信芯片引脚应用讲解
  14. 计算机打字速度在线测试,在线测试打字速度(一分钟打字速度测试)
  15. ANSYS Products19.1下载及安装教程
  16. vue在按钮上绑定enter键
  17. android电视安装app
  18. RabbitMQ第五个实操小案例——主题交换机(TopicExchange)
  19. 35岁之后软件测试工程师靠什么养家?我还能继续做测试。
  20. MinIO杂谈(bucket、对象Object管理、策略policy生成、创建临时用户user)

热门文章

  1. LeetCode 2065. 最大化一张图中的路径价值
  2. Ubuntu18.04+python3.6+pcl-1.8+opencv3+realsense D415环境搭建
  3. PAT Basic Level 1062 最简分数(辗转相除法)
  4. matplotlib 改变时间刻度间隔 改变时间刻度格式
  5. oracle10g win7下使用命令启动服务和实例
  6. PWM调光5V脉冲信号转模拟量信号隔离转换器,PWM控制芯片
  7. AD18层次原理图绘制
  8. Vue中 实现文件流格式图片预览
  9. 塔式计算机sata3内部硬盘,巧用固态硬盘 解决PC用户3大疑难杂症
  10. Github每日精选(第65期):手机自动化测试工具maestro