numpy

本文介绍了Python数据分析的基础,包括numpy、scipy和pandas这三个核心库。numpy提供高效的矩阵运算,scipy是科学计算工具,包含统计和线性代数等,而pandas则用于便捷地操作大型数据集。文章详细讲解了numpy的ndarray对象,如创建、属性及向量化运算,并对比了numpy与Python列表的效率。此外,还涉及了数组的切片、索引以及一些基本的统计函数。
摘要由CSDN通过智能技术生成

概述

数据分析绝对绕不过的三个包是numpy、scipy和pandas。

  • numpy是Python的数值计算扩展,专门用来处理矩阵,它的运算效率比列表更高效。

  • scipy是基于numpy的科学计算包,包括统计、线性代数等工具。

  • pandas是基于numpy的数据分析工具,能更方便的操作大型数据集。

—2017-06-29

基础知识:

List

List is a non-homogeneous data structure which stores the elements in single row and multiple rows and columns.

List can be represented by [ ],which represents you can create an empty list like this data = []

List allows duplicate elements.

data = [[1, 2, 3], [4, 5, 6]]
print(data[0])
print(data[1])
print(data[0][2])
# [1, 2, 3]
# [4, 5, 6]
# 3

Tuple

Tuple is also a non-homogeneous data structure which stores single row and multiple rows and columns.

Tuple can be represented by ( ) data = ()

Tuple allows duplicate elements.

data = ((1, 2, 3), (4, 5, 6))
print(data[0])
print(data[1])
print(data[0][2])
# (1, 2, 3)
# (4, 5, 6)
# 3

学习numpy

numpy的数据结构是n维的数组对象,叫做ndarray。Python的list虽然也能表示,但是不高效 Why?,随着列表数据的增加,效率会降低。

ndarray

创建ndarray数组

  • 方法一 通过list和tuple创建
import numpy as np

data = [[1, 2, 3], [4, 5, 6]]
# data = ((1, 2, 3), (4, 5, 6))
# 嵌套列表会被转换为一个多维数组,它也可以被称为矩阵
array = np.array(data)
# array = np.array(((1, 2, 3), (4, 5, 6)))
# array = np.array([[1, 2, 3], [4, 5, 6]])
print(array[0])
print(array[1])
print(array[0][2])
# [1 2 3]
# [4 5 6]
# 3

一些输出区别:

import numpy as np

data = [[1, 2, 3], [4, 5, 6]]
array = np.array([[1, 2, 3], [4, 5, 6]])
print(array)
print(data)
# [[1 2 3]
#  [4 5 6]]
# [[1, 2, 3], [4, 5, 6]]

numpy一维数组用print输出的时候为 [1 2 3 4],没有“,”这跟python的列表是有些差异的

  • 方法二 通过np.arange创建
import numpy as np

arr = np.arange(5)
print(arr)
arr = np.array([np.arange(3), np.arange(3)])
print(arr)
# [0 1 2 3 4]
# [[0 1 2]
#  [0 1 2]]
  • 方法三 基于arange以及reshape创建多维数组
import numpy as np

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

# [[12 13 14 15]
#  [16 17 18 19]
#  [20 21 22 23]]]

请注意:

  • arange的长度与ndarray的维度的乘积要相等,即 24 = 2X3X4

  • 几个参数就是几维数组

ndarray数组的属性

  • dtype属性

Numpy数组通常是由相同种类的元素组成的, 这样有一个好处—数组元素的类型相同,能快速确定存储数据所需空间的大小,可以用dtype查询其类型:

array = np.array(data)
print(array.dtype)
# int64

优势之一哦

  • ndim属性,数组维度的数量
import numpy as np

array = np.array([[1, 2, 3], [7, 8, 9]])
print(array.ndim)
# 2
  • shape属性,数组对象的尺度,对于矩阵,即n行m列,shape是一个元组(tuple)
print(array.shape)
# (2, 3)
  • size属性用来保存元素的数量,相当于shape中nXm的值
print(array.size)
# 6
  • itemsize属性返回数组中各个元素所占用的字节数大小
print(array.itemsize)
# 8
  • nbytes属性,如果想知道整个数组所需的字节数量,可以使用nbytes属性。其值等于数组的size属性值乘以itemsize属性值。
print(array.nbytes)
# 48
  • T属性,数组转置

运算优势

import numpy as np

data = [[1, 2, 3]]
array = np.array(data)
print(array + 2)
print(array * array)
# [[3 4 5]]
# [[1 4 9]]

关于numpy的向量化运算python的循环遍历运算效率对比,参考下面的例子可以看出差异:

  • 使用python的list进行循环遍历运算
import time


def pySum():
    a = list(range(10000))
    b = list(range(10000))
    c = []
    for i in range(len(a)):
        c.append(a[i]**2 + b[i]**2)
    return c

best_time = 0.0
for i in range(10):
    start_time = time.time()
    pySum()
    end_time = time.time()
    if best_time == 0:
        best_time = end_time - start_time
        continue

    if best_time > (end_time - start_time):
        best_time = end_time - start_time

print("The best time in the 10 loop was %.3fms" % (best_time*1000))
# The best time in the 10 loop was 4.162ms
  • 使用numpy进行向量化运算
def npSum():
    a = np.arange(10000)
    b = np.arange(10000)
    c = a**2 + b**2
    return c

# The best time in the 10 loop was 0.063ms

从上可以看出效率提高了两个数量级,numpy的向量化运算的效率要远远高于python的循环遍历运算

ndarray数组的切片和索引

  • 一维数组

一维数组的切片和索引与python的list索引类似

import numpy as np

array = np.arange(6)
print(array[:4])
print(array[1:4])
print(array[:6:2])
print(array[1:6:2])
# [0 1 2 3]
# [1 2 3]
# [0 2 4]
# [1 3 5]
  • 二维数组的切片和索引
import numpy as np

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

#[[1 2 3]
# [5 6 7]]

# [[1 2 3]]

# [[2 3]]

# [[ 2  3]
#  [ 6  7]
#  [10 11]]

numpy常用统计函数

常用的函数如下:

请注意函数在使用时需要指定axis轴的方向,若不指定,默认统计整个数组。

  • np.sum(),返回求和
  • np.mean(),返回均值
  • np.max(),返回最大值
  • np.min(),返回最小值
  • np.ptp(),数组沿指定轴返回最大值减去最小值,即(max-min)
  • np.std(),返回标准偏差(standard deviation)
  • np.var(),返回方差(variance)
  • np.cumsum(),返回累加值
  • np.cumprod(),返回累乘积值
import numpy as np

array = np.array([[0, 1, 20, 3, 4, 5],
                  [6, 7, 8, 9, 10, 11]])

print(np.max(array))
# 沿axis=1轴方向统计
print(np.max(array, axis=1))
# 沿axis=0轴方向统计
np.max(array, axis=0)

array = np.array([6, 7, 20, 9, 10, 11])
print(np.min(array))

# 20
# [20 11]
# 6
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值