数据分析之numpy

一,介绍

NumPyPython语言的一个扩展程序库。支持高端大量的维度数组矩阵运算,此外也针对数组运算提供大量的数学函数

ndarray 数据结构:

NumPy的核心功能是"ndarray"(即n-dimensional array,多维数组)数据结构。这是一个表示多维度、同质并且固定大小的数组对象。而由一个与此数组相关系的数据类型对象来描述其数组元素的数据格式(例如其字符组顺序、在存储器中占用的字符组数量、整数或者浮点数等等)。

二,使用

1,创建ndarray

import numpy as np

使用np.array()

a1 = np.array([1,2,3,4,5])
a1
# array([1, 2, 3, 4, 5])

a2 = np.array([1,2.123])
a2
# array([ 1.   ,  2.123])

创建np的时候,可以赋值不同类型的数组元素。创建成功数组元素一定会被统一
str 》 float 》int

二维数组创建

a3 = np.array([[3,6,9],[3,6,9],[3,6,5]])
a3

array([[3, 6, 9],
       [3, 6, 9],
       [3, 6, 5]])
注意:

numpy默认ndarray的所有元素的类型是相同的
如果传进来的列表中包含不同的类型,则统一为同一类型,优先级:str>float>int

属性:

shape的使用:shape返回的是ndarray的数组形状。返回值的数据个数表示的就是数组的维度a3.shape
# (3, 3)
import numpy as np

arr1 = np.array([1,2,3,4,5])
arr1  # array([1, 2, 3, 4, 5])

arr2 = np.array([1, "sdf", 2])
arr2  # array([‘1‘, ‘sdf‘, ‘2‘], dtype=‘<U11‘)

arr4 = np.array([1, 2, 3], dtype=‘float‘)
arr4  # array([1., 2., 3.])

arr5 = arr4.astype(‘int64‘)
arr5  # array([1, 2, 3], dtype=int64)

arr6 = np.linspace(1, 10, 20)  # 1到10,生成20个数,之间为等差数列
arr6
# array([ 1.        ,  1.47368421,  1.94736842,  2.42105263,  2.89473684,
        3.36842105,  3.84210526,  4.31578947,  4.78947368,  5.26315789,
        5.73684211,  6.21052632,  6.68421053,  7.15789474,  7.63157895,
        8.10526316,  8.57894737,  9.05263158,  9.52631579, 10.        ])

arr7 = np.arange(1, 20)
arr7
# array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17,
       18, 19])

- 二维数组的创建

np.array([[1,2], [2, 5]])
array([[1, 2],
       [2, 5]])

arr8 = np.array([[1,2,3], [4,5,6],[7,8,9]]).astype(‘float‘)
arr8
# array([[1., 2., 3.],
       [4., 5., 6.],
       [7., 8., 9.]])

arr8.shape
# (3, 3)

np.zeros((5,5), dtype=‘int‘)
# array([[0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0]])

np.ones((3, 4), dtype=‘float‘)
#
array([[1., 1., 1., 1.],
       [1., 1., 1., 1.],
       [1., 1., 1., 1.]])

a1 = np.full((3, 4), 1.1)
a1
# array([[1.1, 1.1, 1.1, 1.1],
       [1.1, 1.1, 1.1, 1.1],
       [1.1, 1.1, 1.1, 1.1]])

a2 = np.random.randint(1, 20, size=(3,4))
a2
# array([[19, 17,  3,  9],
       [19, 18, 16,  4],
       [ 9, 16,  5, 17]])

np.random.seed(10) #该行可以将随机数进行固定
np.random.random((5,6))
# array([[0.77132064, 0.02075195, 0.63364823, 0.74880388, 0.49850701,
        0.22479665],
       [0.19806286, 0.76053071, 0.16911084, 0.08833981, 0.68535982,
        0.95339335],
       [0.00394827, 0.51219226, 0.81262096, 0.61252607, 0.72175532,
        0.29187607],
       [0.91777412, 0.71457578, 0.54254437, 0.14217005, 0.37334076,
        0.67413362],
       [0.44183317, 0.43401399, 0.61776698, 0.51313824, 0.65039718,
        0.60103895]])

np.empty((4, 4))
array([[6.23042070e-307, 4.67296746e-307, 1.69121096e-306,
        1.06810879e-306],
       [8.34441742e-308, 1.78022342e-306, 6.23058028e-307,
        9.79107872e-307],
       [6.89807188e-307, 7.56594375e-307, 6.23060065e-307,
        1.78021527e-306],
       [8.34454050e-308, 1.11261027e-306, 1.15706896e-306,
        1.33512173e-306]])

np.eye(5)
#
array([[1., 0., 0., 0., 0.],
       [0., 1., 0., 0., 0.],
       [0., 0., 1., 0., 0.],
       [0., 0., 0., 1., 0.],
       [0., 0., 0., 0., 1.]])

arr9 = np.arange(12).reshape(3, 4)
arr9
# array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])

索引和切片

arr9 = np.arange(12).reshape(3, 4)
arr9
# array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])

arr9[1][1]
# 5
arr9[1,1]
# 5
arr9[1:, :2]
# array([[4, 5],
       [8, 9]])

arr9[:,::-2]
# array([[ 3,  1],
       [ 7,  5],
       [11,  9]])
import random
li = [random.randint(1, 10) for _ in range(10)]
li
# [2, 1, 6, 6, 5, 4, 2, 6, 5, 1]

# 选出li中大于5的数
arr10 = np.array(li)
arr10
# array([2, 1, 6, 6, 5, 4, 2, 6, 5, 1])

arr10>5
# array([False, False,  True,  True, False, False, False,  True, False,
       False])

arr10[arr10 >4]  # 使用布尔索引
# array([6, 6, 5, 6, 5])

arr10[(arr10 > 4) & (arr10%2 ==0)]  # 大于4 并且是偶数
# array([6, 6, 6])
arr10[(arr10 > 4) | (arr10%2==0)]  # 大于4 或者 是偶数
# array([2, 6, 6, 5, 4, 2, 6, 5])

arr9
# array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])
arr9[:, [0,1]]  # 花式索引
# array([[0, 1],
       [4, 5],
       [8, 9]])
arr9[arr9[:,0] % 2 == 0, 2:]
# 注意,切片:前面为行,使用布尔索引时,有几行就对应个bool值
# array([[ 2,  3],
       [ 6,  7],
       [10, 11]])

利用索引,切片操作图片

# 图片切割
import matplotlib.pyplot as plt
xnh = plt.imread("xnh.jpg")
plt.imshow(xnh)
plt.show

xnh.shape  # 前两个表示像素,后面一个表示色度
# (350, 350, 3)

xnh1 = xnh-100
plt.imshow(xnh1)
plt.show

级联

np.concatenate()

# 1.一维,二维,多维数组的级联,实际操作中级联多为二维数组
a1 = np.random.randint(0,100,size=(3,))
a2 = np.random.randint(0,100,size=(3,3))

a1
# array([23, 94, 11])
a2
#array([[28, 74, 88],
       [ 9, 15, 18],
       [80, 71, 88]])

np.concatenate((a1,a1),axis=0)
# array([23, 94, 11, 23, 94, 11])

np.concatenate((a2,a2),axis=1)#array([[28, 74, 88, 28, 74, 88],
       [ 9, 15, 18,  9, 15, 18],
       [80, 71, 88, 80, 71, 88]])

利用级联合并图片

#级联需要注意的点:

级联的参数是列表:一定要加中括号或小括号
维度必须相同
形状相符:在维度保持一致的前提下,如果进行横向(axis=1)级联,必须保证进行级联的数组行数保持一致。如果进行纵向(axis=0)级联,必须保证进行级联的数组列数保持一致。
可通过axis参数改变级联的方向

分割

aa = np.random.randint(1, 50,size=(7,7))
aa
# array([[41, 47, 33, 31, 23,  6, 46],
       [19, 49, 45,  2, 44, 14, 19],
       [28, 20, 38,  8, 25, 40, 16],
       [ 7, 45, 10,  1, 45,  5, 15],
       [46,  5,  7, 43, 10, 45, 49],
       [37, 27, 39, 21, 10, 41, 17],
       [12, 40, 18, 40, 34, 12, 15]])

np.split(aa, [2,4,6], axis=1)
# [array([[41, 47],
        [19, 49],
        [28, 20],
        [ 7, 45],
        [46,  5],
        [37, 27],
        [12, 40]]), array([[33, 31],
        [45,  2],
        [38,  8],
        [10,  1],
        [ 7, 43],
        [39, 21],
        [18, 40]]), array([[23,  6],
        [44, 14],
        [25, 40],
        [45,  5],
        [10, 45],
        [10, 41],
        [34, 12]]), array([[46],
        [19],
        [16],
        [15],
        [49],
        [17],
        [15]])]

聚合运算

Function Name    NaN-safe Version    Description
np.sum    np.nansum    Compute sum of elements
np.prod    np.nanprod    Compute product of elements
np.mean    np.nanmean    Compute mean of elements
np.std    np.nanstd    Compute standard deviation
np.var    np.nanvar    Compute variance
np.min    np.nanmin    Find minimum value
np.max    np.nanmax    Find maximum value
np.argmin    np.nanargmin    Find index of minimum value
np.argmax    np.nanargmax    Find index of maximum value
np.median    np.nanmedian    Compute median of elements
np.percentile    np.nanpercentile    Compute rank-based statistics of elements
np.any    N/A    Evaluate whether any elements are true
np.all    N/A    Evaluate whether all elements are true
np.power 幂运算
np.max(aa, axis=1)
# array([47, 49, 40, 45, 49, 41, 40])
np.mean(aa)
# 26.3265306122449
np.any(aa)
# True  有一个True就是True

广播机制

m = np.ones((2, 3))
a = np.arange(3)

m
# array([[1., 1., 1.],
       [1., 1., 1.]])
a
# array([0, 1, 2])

m + a
# array([[1., 2., 3.],
       [1., 2., 3.]])

a = np.arange(3).reshape((3, 1))
b = np.arange(1,4)

a + b  # 缺失元素用已有值填充
array([[1, 2, 3],
       [2, 3, 4],
       [3, 4, 5]])
【重要】ndarray广播机制的三条规则:缺失维度的数组将维度补充为进行运算的数组的维度。缺失的数组元素使用已有元素进行补充。

规则一:为缺失的维度补1(进行运算的两个数组之间的维度只能相差一个维度)
规则二:缺失元素用已有值填充
规则三:缺失维度的数组只能有一行或者一列

排序

math相关

原文地址:https://www.cnblogs.com/qq631243523/p/10485768.html

时间: 2024-08-10 12:05:38

数据分析之numpy的相关文章

Python——数据分析,Numpy,Pandas,matplotlib

由于图片内容太多,请拖动至新标签页再查看 Python--数据分析,Numpy,Pandas,matplotlib 原文地址:https://www.cnblogs.com/Jery-9527/p/10804069.html

数据分析之Numpy库入门

1.列表与数组 在python的基础语言部分,我们并没有介绍数组类型,但是像C.Java等语言都是有数组类型的,那python中的列表和数组有何区别呢? 一维数据:都表示一组数据的有序结构 区别: 列表:数据类型可以不同,如:[3.1413,'pi',3.1404,[3.1402,2.34],'3.2376'] 数组:数据类型相同 .如[3.14,34.34,3433.3,343.23] 二维数据:二维数据由多个一维数据构成,是一维数据的集合形式!表格是典型的二维数据! 注意:表格的表头,可以是

python数据分析之numpy+pandas+scipy+matplotlib+scikit-learn安装

摘要 利用python来进行数据分析的时候,需要安装一些常见的工具包,如numpy,pandas,scipy等等,在安装的过程中,经常遇到一些安装细节的问题,如版本不匹配,需要依赖包没有正确安装等等,本文汇总梳理了下几个必要安装包的安装步骤,希望对读者有帮助,环境是windows 64 bit+python2.7.11. 一.安装python2.7.11 进入官网:https://www.python.org/downloads/release/python-2711/ 下载如下的连接: 下载之

Python数据分析之numpy学习

Python模块中的numpy,这是一个处理数组的强大模块,而该模块也是其他数据分析模块(如pandas和scipy)的核心. 接下面将从这5个方面来介绍numpy模块的内容: 1)数组的创建 2)有关数组的属性和函数 3)数组元素的获取--普通索引.切片.布尔索引和花式索引 4)统计函数与线性代数运算 5)随机数的生成 数组的创建 numpy中使用array()函数创建数组,array的首个参数一定是一个序列,可以是元组也可以是列表. 一维数组的创建 可以使用numpy中的arange()函数

《利用python进行数据分析》NumPy基础:数组和矢量计算 学习笔记

一.有关NumPy (一)官方解释 NumPy is the fundamental package for scientific computing with Python. It contains among other things: a powerful N-dimensional array object sophisticated (broadcasting) functions tools for integrating C/C++ and Fortran code useful

数据分析模块Numpy Pandas

如何使用Python进行量化投资 自己编写:NumPy+pandas+Matplotlib+…… 在线平台:聚宽.优矿.米筐.Quantopian.…… 开源框架:RQAlpha.QUANTAXIS.…… IPython:安装:pip install ipython TAB键自动完成 ?命令(内省.命名空间搜索) 执行系统命令(!) %run命令执行文件代码 %paste %cpaste命令执行剪贴板代码 与编辑器和IDE交互 魔术命令:%timeit %pdb … 使用命令历史 输入与输出变量

(转)Python数据分析之numpy学习

原文:https://www.cnblogs.com/nxld/p/6058572.html Python模块中的numpy,这是一个处理数组的强大模块,而该模块也是其他数据分析模块(如pandas和scipy)的核心. 接下面将从这5个方面来介绍numpy模块的内容: 1)数组的创建 2)有关数组的属性和函数 3)数组元素的获取--普通索引.切片.布尔索引和花式索引 4)统计函数与线性代数运算 5)随机数的生成 数组的创建 numpy中使用array()函数创建数组,array的首个参数一定是

Python数据分析之Numpy入门

目录 1.什么是numpy 2.安装numpy 3.n维数组对象 4.数组创建 5.数组维度 6.数组元素个数 7.数组元素数据类型 8.改变数组形状 9.数组索引和切片操作 10.数组转换与元素迭代 11.数组级联操作 12.数组数值舍入 13.数组数值添加 14.数组元素去重 15.常用数学函数 16.常用统计函数 17.矩阵运算 1.什么是numpy NumPy(Numerical Python)是Python语言中做科学计算的基础库.重在于数值计算,也是大部分Python科学计算库的基础

利用Python进行数据分析(6) NumPy基础: 矢量计算

矢量化指的是用数组表达式代替循环来操作数组里的每个元素. NumPy提供的通用函数(既ufunc函数)是一种对ndarray中的数据进行元素级别运算的函数. 例如,square函数计算各元素的平方,rint函数将各元素四舍五入: 还有一些函数接受2个参数,叫二元ufunc,比如add函数和maximum函数: numpy.where函数 numpy.where函数是三元表达式 x if condition else y 的矢量化版本,例如: np.where函数的第二个参数和第三个参数不是必要的

python数据分析之numpy、matplotlib的使用

5.3 Python的科学计算包 - Numpy numpy(Numerical Python extensions)是一个第三方的Python包,用于科学计算.这个库的前身是1995年就开始开发的一个用于数组运算的库.经过了长时间的发展,基本上成了绝大部分Python科学计算的基础包,当然也包括所有提供Python接口的深度学习框架. numpy在Linux下的安装已经在5.1.2中作为例子讲过,Windows下也可以通过pip,或者到下面网址下载: Obtaining NumPy & Sci