【Pyhon数据分析】Numpy

ndarray

一个多维数组对象,是python中一个快速、灵活的大型数据集容器。数组允许你使用类似于标量的操作语法在整块数据上进行数学计算。

例如:

import numpy as np

data = np.random.randn(2, 3)
print("随机数组: ", data)
print("数组运算: ", data * 10)

# 随机数组:  [[-2.2975158  -1.46255698  0.0216459 ]
#  [-2.03310149  0.25298798 -0.05674148]]
# 数组运算:  [[-22.975158   -14.62556977   0.21645902]
#  [-20.33101493   2.52987979  -0.56741477]]
函数名描述
array将任意序列型对象转为ndarray, 会复制所有数据
asarray功能同array, 但若对象已经是ndarray,则不再复制
arange内建函数range数组版,返回一个数组
ones根据给定形状和数据类型生成全1数组
ones_like根据所给的数组生成一个形状一样的全1数组
zeros根据给定形状和数据类型生成全0数组
zeros_like根据所给的数组生成一个形状一样的全0数组
empty根据给定形状生成一个没有初始化数值的空数组
empty_like根据所给数组生成一个形状一样但没有初始化数值的空数组
full根据给定的形状和数据类型生成指定数值的数组
full_like根据所给的数组生成一个形状一样但内容是指定数值的数组
eye, identity生成一个N*N特征矩阵(对角线位置都是1,其余位置是0)

数据类型

类型类型代码描述
int8, uint8i1, u1有符号和无符号的8数位整数
int16, uint16i2, u2有符号和无符号的16数位整数
int32, uint32i4, u4有符号和无符号的32数位整数
int64, uint64i8, u8有符号和无符号的64数位整数
float16f2半精度浮点数
float32f4或f标准单精度浮点数;兼容C语言float
float64f8或d标准双精度浮点数;兼容C语言double和Python float
float128f16或g拓展精度浮点数
complex64, complex128, complex256c8, c16, c32
bool?布尔值, 存储True或False
objectOpython object类型
string_S修正的ASCII字符串类型;例如生成一个长度为10的字符串类型,使用“S10”
unicode_U修正的Unicode类型,生成一个长度为10的unicode类型,使用“U10”

数组算术

数组与数组

任何再两个等尺寸数组之间的算术操作都应用了逐元素操作的方法

import numpy as np

data = np.arange(10)
print(data)
print(data * data)
print(data - data)

# [0 1 2 3 4 5 6 7 8 9]
# [ 0  1  4  9 16 25 36 49 64 81]
# [0 0 0 0 0 0 0 0 0 0]

标量与数组

带有标量计算的算术操作,会把计算参数传递给数组的每一个元素

import numpy as np

data = np.arange(10)
print(data / 5)
print(data ** 2)

# [0.  0.2 0.4 0.6 0.8 1.  1.2 1.4 1.6 1.8]
# [ 0  1  4  9 16 25 36 49 64 81]

布尔值数组与数组

同尺寸数组之间的比较,会产生一个布尔值数组

import numpy as np

data1 = np.arange(1, 5)
data2 = np.arange(5, 1, -1)
print(data1)
print(data2)
print(data1 > data2)

# [1 2 3 4]
# [5 4 3 2]
# [False False False  True]

索引与切片

基础

数组的切片是原数组的视图,任何对试图的修改都会反映到原数组上
如果想要一份数组切片的拷贝而不是一份试图的话,就必须显式的复制这个数组,例如 data[0:3].copy()

import numpy as np

data = np.arange(10)
print(data)
data[0: 3] = 5
print(data)

# [0 1 2 3 4 5 6 7 8 9]
# [5 5 5 3 4 5 6 7 8 9]

高纬度索引

高纬度数组中获取中间值,可以通过传递一个索引,索引是以逗号分隔的列表

import numpy as np

data = np.array([[1, 2, 3], [4, 5, 6]])
print(data)
print(data[0][0])
print(data[0, 0])  # 取第一行第一列
print(data[:2, 0])  # 取前两行的第一列

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

布尔索引

布尔索引, 索引中填入等长度的布尔值数组

import numpy as np

data = np.arange(10)
print(data)
print(data < 5)
print(data[data < 5])

# [0 1 2 3 4 5 6 7 8 9]
# [ True  True  True  True  True False False False False False]
# [0 1 2 3 4]
算术运算符描述
&
|
~

神奇索引

神奇索引与切片不同,它总是将数据复制到一个新的数组中
索引列表中传入索引列表,可以指定位置顺序,支持负数索引

import numpy as np

data = np.arange(10, 1, -1)
print(data)
print(data[[3, 1, 2]])

# [10  9  8  7  6  5  4  3  2]
# [7 9 8]

查找指定坐标的数值,如下查找(1, 0) 与 (0, 1)对应的数

import numpy as np

arr = np.arange(16).reshape((4, 4))
print(arr)
print(arr[[1, 0], [0, 1]])

# [[ 0  1  2  3]
#  [ 4  5  6  7]
#  [ 8  9 10 11]
#  [12 13 14 15]]
# [4 1]

按照指定行后指定列的数据, 如下,获取第2、3行的1、3列数据

import numpy as np

arr = np.arange(16).reshape((4, 4))
print(arr)
print(arr[[2, 3]][:, [1, 3]])

# [[ 0  1  2  3]
#  [ 4  5  6  7]
#  [ 8  9 10 11]
#  [12 13 14 15]]
# [[ 9 11]
#  [13 15]]

面向数组编程

条件逻辑(where)

条件 + 数组 + 数组

import numpy as np

arr1 = np.array([10, 11, 12, 13])
arr2 = np.array([20, 21, 22, 23])
condition = np.array([True, False, False, True])
res = np.where(condition, arr1, arr2)
print(res)

# [10 21 22 13]

条件 + 标量 + 标量

import numpy as np

condition = np.array([True, False, False, True])
res = np.where(condition, 1, -1)
print(res)

# [ 1 -1 -1  1]

条件 + 标量 + 数组

import numpy as np

arr = np.array([5, 6, 7, 3])
condition = np.array([True, False, False, True])
res = np.where(condition, arr, -1)
print(res)

# [ 5 -1 -1  3]

布尔值数组

sum可以计算布尔数组中的True个数

import numpy as np

data = np.random.randn(100)
res = (data > 0).sum()
print(res)

# 51

any检查数组是否存在True,all检查数组是否全是True,所有非0元素都会按True处理

import numpy as np

data = np.array([False, True, False, True])
print(data.any())
print(data.all())

# True
# False

文件存取

np.save 和 np.load 是高效存取磁盘数据的两大工具,数组在默认情况下是以未压缩的格式进行存储,后缀名是.npy

import numpy as np

data = np.random.randn(10)

np.save("test", data)  # 数据存入test.npy文件
print(np.load("test.npy"))  # 取出test.npy文件的数据

# [-0.2850219  -0.18339792  0.4742465   0.49777223  0.46006409  1.10853978
#  -0.87442894 -2.19720832 -0.22959514  0.29942189]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值