你必须掌握的Python数据分析工具之Numpy

简介: 你必须掌握的Python数据分析工具之Numpy

Python是数据分析领域极受喜爱的主流程序语言。这里主要介绍Numpy的常用用法。如果你是从事数据分析、或者人工智能等相关领域,而所用的语言又是Python的话,以下知识点都应该 “张口就来” 。建议收藏,有事没事拿出来看两遍。

Numpy

  在使用Numpy之前的话,我们需要先导入它:

import numpy as np

  常用语句

  • 将数据转化为标量
np.asscalar() # Convert an array of size 1 to its scalar equivalent.
  • 生成随机数

  np.random.seed(1233)设置随机种子,随机种子一旦固定,每次生成的数据都会固定,除非改变种子,随机数才会发生改变。

  rand生成均匀分布随机数:

# 产生2行三列均匀分布随机数组
print(np.random.rand(2,3))

  randn生成正太分布随机数:

# 三行三列正态分布随机数据
print(np.random.randn(3,3))

  randint生成指定范围内随机整数

# (1, 100)以内5行5列随机整数
print(np.random.randint(1,100,[5,5]))

  random生成10个随机浮点数

# (0,1)内10个随机浮点数
print(np.random.random(10))

  choice给定范围内随机选一个数

# [0,10)内10个随机选一个数
print(np.random.choice(10))

  生成正太分布数据:

mu = 1
sigma = 2
num = 10
print(np.random.normal(mu, sigma, num))

  按行打乱数据

rand_data = np.random.randint(1, 10, (3, 4))
np.random.shuffle(rand_data)

创建数组

  我们主要用numpy来创建数组,或者称之为构造变量,当然自己一个一个变量敲进电脑也是可以的,用numpy的话就会方便一点。

  • 手动创建一维的变量
a = np.array([1,2,3],dtype=np.int32)
• 1

  dtype是设置你创建变量的类型,你也可以选择float类型,这都没啥问题。如果把上面的代码print显示出来的话,如下所示:

>>>[1 2 3]
• 1
  • 手动创建二维的变量
b = np.array([[1,2],[3,4],[5,6]],dtype=np.int32)
• 1

  这样我们就能生成两行三列的数组,结果如下所示:

>>>[[1 2]
  [3 4]
  [5 6]]

arange

  • arange创建一维数组

  我们创建的数组如果比较小的话,我们可以手动输入,但是如果比较大了的话,我们手动输入就太费事了,需要调用一些函数,像arange函数就可以很方便地创建一维数组:

c = np.arange(1,10,2)
• 1

  代码所表示的意思就是,从1到10,每隔两个数字产生,输出显示出来就是:

>>>[1 3 5 7 9]
• 1

  这样产生的数据类型是numpy.ndarray,dtype是int64

linspace

  • linspace产生等差数列

  比如我们想从数字1到11产生5个数字,这些数字之间都是等间隔的:

d = np.linspace(1,11,5)
• 1

  结果显示如下所示:

>>>[ 1.   3.5  6.   8.5 11. ]
• 1

  这里的dtype是float64

logspace

  • logspace创建等比数列

  从1到10产生八个等比数列:

e = np.logspace(1,10,8)
• 1

  结果显示如下所示:

>>>[1.00000000e+01 1.93069773e+02 3.72759372e+03 7.19685673e+04
 1.38949549e+06 2.68269580e+07 5.17947468e+08 1.00000000e+10]

fromfunction

  • fromfunction创建数组

  该函数的第一个参数为计算数据元素的函数;第二个参数是代表数组的大小的序列,序列的每一个值代表数组对应维度的大小。

def funcA(i):
    return i+i
f = np.fromfunction(funcA, (10,))

  结果显示如下所示:

>>>[ 0.  2.  4.  6.  8. 10. 12. 14. 16. 18.]
• 1

  如果是两维数据做运算的话,代码如下所示:

def funcB(i,j):
    return i+j
g = np.fromfunction(funcB, (3,2))

  结果显示如下所示:

>>>[[0. 1.]
  [1. 2.]
  [2. 3.]]

shape和reshape

  除了产生数组之外,我们还会经常改变数组的维度,这就要求我们查看shape并使用reshape函数。

  • shape函数查看数组大小

  实现如下所示:

a = np.array([[1,2,],[3,4],[5,6]],dtype=np.int32)
print(a.shape)

  结果显示如下所示:

>>>(3, 2)
• 1
  • reshape函数改变数组维度

  实现如下所示:

a = np.array([[1,2,],[3,4],[5,6]],dtype=np.int32)
print(a.reshape(2,3))

  结果显示如下所示:

>>>[[1 2 3]
  [4 5 6]]

获取数组元素

  上面是如何生成数组,那我们如何从数组中拿元素呢?这里的操作就跟列表的操作类似了:

  • 取其中某一个元素
a = np.array([[1,2,],[3,4],[5,6]],dtype=np.int32)
print(a[0][1])

  结果显示如下所示:

>>> 2
• 1
  • 取数组后半部分
a = np.array([[1,2,],[3,4],[5,6]],dtype=np.int32)
print(a[0][0:])

  结果显示如下所示:

>>> [1 2]
  • 取数组前半部分
a = np.array([[1,2,],[3,4],[5,6]],dtype=np.int32)
print(a[0][:-1])

  结果显示如下所示:

>>> [1]
• 1
  • 每隔两个取
a = np.array([[1,2,],[3,4],[5,6]],dtype=np.int32)
print(a[0::2])

  结果显示如下所示:

>>> [[1 2]
   [5 6]]
  • 依据下标能获取共享地址
a = np.array([[1,2,],[3,4],[5,6]],dtype=np.int32)
b=a[:]
print('b',b)
b[2,0]=10
print('a',a)

  结果显示如下所示:

>>> b [[1 2]
     [3 4]
       [5 6]]
    a [[ 1  2]
       [ 3  4]
       [10  6]]
  • 依据整数序列不与原数组共享地址
a = np.array([[1,2,],[3,4],[5,6]],dtype=np.int32)
b=a[[2]]
print('b',b)
b[0,0]=10
print('a',a)

  结果显示如下所示:

>>> b [[5 6]]
  a [[1 2]
     [3 4]
     [5 6]]
  • 使用bool数组作为下标获取数据
a = np.array([[1,2,],[3,4],[5,6]],dtype=np.int32)
print('bool',a>2)
print('a>2',a[a>2])

  结果显示如下所示:

>>> bool: [[False False]
      [ True  True]
          [ True  True]]
     a>2: [3 4 5 6]

ufunc函数

  ufunc的全称是universal function,即通用处理函数。Numpy提供的ufunc函数大致可以划分为五类:分别为:Math operations(数学操作)、Trigonometric function(三角函数)、Bit-twiddling function(位操作)、Comparison function(比较函数)以及Floating function(浮点函数)。

  • 加法运算
a = np.array([1,2,3,4],dtype=np.int32)
b = np.array([5,6,7,8],dtype=np.float32)
print(np.add(a,b))

  结果显示如下所示:

>>> [ 6.  8. 10. 12.]
• 1
  • 减法运算
a = np.array([1,2,3,4],dtype=np.int32)
b = np.array([5,6,7,8],dtype=np.float32)
print(np.subtract(a,b))

  结果显示如下所示:

>>> [-4. -4. -4. -4.]
• 1
  • 三角函数

  主要有np.sinnp.cos等,其参数并不直接代表三角函数的度数,而是使用pi替代。

  • 位操作函数

  包含按位的与、或、异或、左移、右移等操作:

a = np.binary_repr(5)
b = np.binary_repr(7)
c = np.bitwise_and(5,7)
d = np.bitwise_or(5,7)
e = np.left_shift(5,2)
f = np.right_shift(5,2)
print('a:{}, b:{}, c:{}, d:{}, e:{}, f:{}'.format(a,b,c,d,e,f))

  结果显示如下所示:

>>> a:101, b:111, c:5, d:7, e:20, f:1
• 1
  • 比较函数

  包含了数值比较逻辑运算取最大值取最小值等操作。

  1. 比大小greater函数:

a = np.array([1,5])
b = np.array([0,10])
print(np.greater(a, b))

  结果显示如下所示:

>>> [ True False]
• 1

  2. 比相等equal函数

a = np.array([0,5])
b = np.array([0,10])
print(np.equal(a, b))

  结果显示如下所示:

>>> [ True False]
• 1

  3. 逻辑判断logical_and函数:

x = np.arange(1,5)
print(np.logical_and(x>1, x<3))

  结果显示如下所示:

>>> [False  True False False]
• 1

  4. 浮点函数

  包含了类型判别、是否是最大值、向上取整等操作

  a . 如果具有非零虚部,则比较复杂:

x = [3+1j, 6+0j, 7.5, 6, 2j]
print(np.iscomplex(x))

  结果显示如下所示:

>>> [ True False False False  True]
• 1

   b. 判断是否是无穷大:

print(np.isinf(np.inf))
• 1

   结果:

>>> [ True False False False  True]
• 1

   c. 向正无穷取整:

x = [2.1, -2.1, 3.54, 7.2, -7.2]
print(np.ceil(x))

  结果:

>>> [ 3. -2.  4.  8. -7.]
• 1

  d. 取下界:

x = [2., -3., 3., 7., -8.]
print(np.floor(x))

  结果:

>>> [ 2. -3.  3.  7. -8.]
• 1

文件IO

  Numpy提供一些文件存取操作,方便将ndarray数组元素存储到文件以及从文件读取数据来初始化数组。其中tofilefromfile以二进制形式的方式存取;saveload函数以Numpy的专有格式存取;savez可以保存多个数组到同一个文件,并可以通过load循环取出。tofilefomfile示例如下:

  • tofilefromfile示例
x = np.array([2.1, -2.1, 3.54, 7.2, -7.2])
x.tofile('a.bin')
y = np.fromfile('a.bin',dtype=np.float64)
print(y)

  结果:

>>> [ 2.1  -2.1   3.54  7.2  -7.2 ]
• 1
  • saveload示意
x = np.array([2.1, -2.1, 3.54, 7.2, -7.2])
x.tofile('a.bin')
y = np.fromfile('a.bin',dtype=np.float64)
print(y)

  结果:

>>> [ 2.1  -2.1   3.54  7.2  -7.2 ]
• 1
  • savezload示例
a = np.array([[1,2,3],[4,5,6]])
b = np.array([1,2,3])
c = np.array([1.2,3.1,3.3])
np.savez('data.npz',a,b,c)
arr = np.load('data.npz')
print('arr_0',arr['arr_0'])
print('arr_1',arr['arr_1'])
print('arr_2',arr['arr_2'])

  结果:

>>> arr_0 [[1 2 3]
       [4 5 6]]
  arr_1 [1 2 3]
  arr_2 [1.2 3.1 3.3]

我的微信公众号名称深度学习与先进智能决策

微信公众号ID:MultiAgent1024

公众号介绍:主要研究强化学习、计算机视觉、深度学习、机器学习等相关内容,分享学习过程中的学习笔记和心得!期待您的关注,欢迎一起学习交流进步!

相关文章
|
3天前
|
文字识别 算法 数据挖掘
视觉智能开放平台产品使用合集之对于统计研究和数据分析,有哪些比较好的工具推荐
视觉智能开放平台是指提供一系列基于视觉识别技术的API和服务的平台,这些服务通常包括图像识别、人脸识别、物体检测、文字识别、场景理解等。企业或开发者可以通过调用这些API,快速将视觉智能功能集成到自己的应用或服务中,而无需从零开始研发相关算法和技术。以下是一些常见的视觉智能开放平台产品及其应用场景的概览。
|
4天前
|
数据可视化 数据挖掘 知识图谱
精选:15款顶尖Python知识图谱(关系网络)绘制工具,数据分析的强力助手
这里有15款免费工具推荐:NetworkX(Python基础),Graph-tool(C++速度),Graphviz(可视化库),ipycytoscape(Jupyter集成),ipydagred3,ipySigma(NetworkX + Web),Netwulf(交互式),nxviz(Matplotlib绑定),Py3plex(复杂网络分析),Py4cytoscape(Python+Cytoscape),pydot(Graphviz接口),PyGraphistry(GPU加速),python-igraph,pyvis(交互式图形),SNAP(大规模网络分析)。绘制和理解网络图从未如此简单!
13 0
|
5天前
|
机器学习/深度学习 自然语言处理 数据挖掘
使用Python和大模型进行数据分析和文本生成
Python语言以其简洁和强大的特性,成为了数据科学、机器学习和人工智能开发的首选语言之一。随着大模型(Large Language Models, LLMs)如GPT-4的崛起,我们能够利用这些模型实现诸多复杂任务,从文本生成到智能对话、数据分析等等。在这篇文章中,我将介绍如何用Python连接和使用大模型,并通过示例展示如何在实际项目中应用这些技术。
|
8天前
|
数据采集 机器学习/深度学习 数据可视化
利用Python和Pandas库构建高效的数据分析流程
在数据驱动的时代,数据分析已成为企业决策的关键环节。本文介绍如何利用Python编程语言及其强大的数据分析库Pandas,构建一套高效且可扩展的数据分析流程。与常规的数据分析流程不同,本文不仅涵盖数据加载、清洗、转换等基础步骤,还强调数据可视化、模型探索与评估等高级分析技巧,并通过实际案例展示如何在Python中实现这些步骤,为数据分析师提供一套完整的数据分析解决方案。
|
2天前
|
数据挖掘 Python
python数据分析常用图大集合
python数据分析常用图大集合
|
1月前
|
存储 机器学习/深度学习 数据处理
NumPy:从初识到实战,探索Python科学计算的无限可能
NumPy:从初识到实战,探索Python科学计算的无限可能
45 0
|
1月前
|
程序员 开发工具 索引
图解Python numpy基本操作
图解Python numpy基本操作
|
16天前
|
BI 测试技术 索引
Python学习笔记之NumPy模块——超详细(安装、数组创建、正态分布、索引和切片、数组的复制、维度修改、拼接、分割...)-1
Python学习笔记之NumPy模块——超详细(安装、数组创建、正态分布、索引和切片、数组的复制、维度修改、拼接、分割...)
|
12天前
|
Python
NumPy 是 Python 中的一个重要的科学计算包,其核心是一个强大的 N 维数组对象 Ndarray
【6月更文挑战第18天】NumPy的Ndarray是科学计算的核心,具有ndim(维度数)、shape(各维度大小)、size(元素总数)和dtype(数据类型)属性。方法包括T(转置)、ravel()(扁平化)、reshape()(改变形状)、astype()(转换数据类型)、sum()(求和)及mean()(计算平均值)。更多属性和方法如min/max等可在官方文档中探索。
34 5
|
12天前
|
Python
NumPy 是 Python 的一个强大的科学计算库,它允许你创建各种类型的数组
【6月更文挑战第18天】**NumPy**是Python的科学计算库,用于创建和操作多维数组。常用数组生成方法包括:`np.array()`从列表转换为数组;`np.zeros()`生成全零矩阵;`np.ones()`创建全一矩阵;`np.linspace()`产生等差序列;`np.arange()`创建等差数列;以及`np.eye()`生成对角线为1的二维数组。更多方法可查阅NumPy官方文档。
24 2