python数据分析之Numpy

北战南征 提交于 2020-02-26 18:01:13

Numpy

NumPy系统是Python的一种开源的数值计算扩展

ndarray 多维数组
  * 所有元素必须是相同类型
  * ndim属性,维度个数
  * shape属性,各维度大小
  * dtype属性,数据类型

​# coding:utf-8
import numpy as np
# 生成指定维度的随机多维数据
data = np.random.rand(2, 3)
print(data)
print(type(data))
ndim, shape 和 dtype 属性
print('维度个数', data.ndim)
print('各维度大小: ', data.shape)
print('数据类型: ', data.dtype)

创建ndarray
# list转换为 ndarray
l = range(10)
data = np.array(l)
print(data)
print(data.shape)
print(data.ndim)

# 嵌套序列转换为ndarray
l2 = [range(10), range(10)]
data = np.array(l2)
print(data)
print(data.shape)
print(data.ndim)

# np.zeros, np.ones 和 np.empty

# np.zeros
zeros_arr = np.zeros((3, 4))

# np.ones
ones_arr = np.ones((2, 3))

# np.empty
empty_arr = np.empty((3, 3))

# np.empty 指定数据类型
empty_int_arr = np.empty((3, 3), int)

print(zeros_arr)
print('-------------')
print(ones_arr)
print('-------------')
print(empty_arr)
print('-------------')
print(empty_int_arr)

# np.arange()
print(np.arange(10))

ndarray数据类型
zeros_float_arr = np.zeros((3, 4), dtype=np.float64)
print(zeros_float_arr)
print(zeros_float_arr.dtype)

# astype转换数据类型
zeros_int_arr = zeros_float_arr.astype(np.int32)
print(zeros_int_arr)
print(zeros_int_arr.dtype)

矢量化 (vectorization)
# 矢量与矢量运算
arr = np.array([[1, 2, 3],
        [4, 5, 6]])

print("元素相乘:")
print(arr ** 3)

print("矩阵相加:")
print(arr + arr)

# 矢量与标量运算
print(1. / arr)
print(2. * arr)

索引与切片
# 一维数组
arr1 = np.arange(10)
print(arr1)

print(arr1[2:5])
# 多维数组
arr2 = np.arange(12).reshape(3,4)
print(arr2)

print(arr2[2,1])

print(arr2[0:2, 2:])

print(arr2[:, 1:3])

# 条件索引

# 找出 data_arr 中 2015年后的数据
data_arr = np.random.rand(3,3)
print(data_arr)

year_arr = np.array([[2000, 2001, 2000],
           [2005, 2002, 2009],
           [2001, 2003, 2010]])

is_year_after_2005 = year_arr >= 2005
print is_year_after_2005
print is_year_after_2005.dtype
filtered_arr = year_arr[is_year_after_2005]
print filtered_arr
filtered_arr = year_arr[year_arr >= 2005]
print(filtered_arr)

# 多个条件
filtered_arr = year_arr[(year_arr <= 2005) & (year_arr % 2 == 0)]
print(filtered_arr)
filtered_arr = year_arr[(year_arr <= 2005) | (year_arr % 2 == 0)]
print(filtered_arr)
filtered_arr = year_arr[(year_arr <= 2005) & (year_arr % 2 == 0) & (year_arr > 2000)]
print(filtered_arr)

转置
arr = np.random.rand(2,3)
print(arr)
print(arr.transpose())

arr3d = np.random.rand(2,3,4)
print(arr3d)
print('----------------------')
print(arr3d.transpose((1,0,2))) # 3x2x4

通用函数

arr = np.random.randn(2,3)

print(arr)
# 向上取整
print(np.ceil(arr))
# 向下取整
print(np.floor(arr))
# 四舍五入
print(np.rint(arr))
# 判断是否为NaN
print(np.isnan(arr))
# 元素相乘
a1 = np.array([[1,2,3], [4,5,6]])
a2 = np.array([[4,6,3], [4,2,7]])
print(np.multiply(a1, a2))
# 元素相除
print(np.divide(a1, a2))
print(np.divide(a1*1.0, a2*1.0))

#np.where
arr = np.random.randn(3,4)
print(arr)
# 格式 where(条件,成立,不成立)
print(np.where(arr > 0, 1, -1))

常用的统计方法
  • 默认在全部维度上做统计
  • arr = np.arange(10).reshape(5,2)
    arr = np.array([[1, 3, 5, 2, 4],[4,2,3,6,1]])
    print(arr)

    print(np.sum(arr))
    print(np.sum(arr, axis=0))
    print(np.sum(arr, axis=1))
    # 平均数
    print(np.mean(arr))
    # 最大值
    print(np.max(arr))
    # 最小值
    print(np.min(arr))
    # 方差
    # s^2 = ((x1-M)^2+(x2-M)^2+...+(xn-M)^2) / n
    # M为平均数, n为数据个数, s^2为方差
    print('--------',np.var(arr))
    # 标准差为s
    print(np.std(arr))
    # 最大值下标
    print(np.argmax(arr))
    # 最小值下标
    print(np.argmin(arr))
    # 累加
    print(np.cumsum(arr))
    # 累乘
    print(np.cumprod(arr))
# np.all 和 np.any
arr = np.random.randn(2,3)
print(arr)
# 至少有一个元素满足条件
print(np.any(arr > 0))
# 全部满足条件
print(np.all(arr > 0))
# np.unique
arr = np.array([[1, 2, 1], [2, 3, 4], [1, 5, 6]])
print(arr)
# 找出数组中的唯一值并返回已排序的结果
print(np.unique(arr))
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!