一、基本概念
numpy特点
numpy作为三方库,能快速操作数组,也就是python中的列表类型数据,包括数组创建查询修改移除,意味着也能快速处理excel等来源数据,在数据分析中是非常实用的工具。
1、批量化操作数组数据,高效;
2、广播机制,不同数组之间的交互(意味着数据与数据之间的交互)
一些基本概念
数组维度
一维:[1,2,3,4] 只有行
二维:[ [1,2],[3,4] ] 行和列
三维:[ [ [1,2],[3,4] ],[ [1,2],[3,4] ] ] 可结合x,y,z轴理解
常见数组一般最高就到三维,更高维的需要发挥三体人想象力去理解
二、numpy数组
numpy数组创建
1. numpy.array(可迭代对象)
import numpy as np
np.array(可迭代对象)
#可迭代对象:列表、元组、range(number)
#e.g
np.array([i for i in range(10)])
np.array((0,1,2,3,4,5,6,7,8,9))
np.array(range(10))
ps: numpy高效在这里可以稍微体现一下,以循环生成10000000个数据为例
import numpy as np
import time
#普通for循环生10000000长度数组
t1 = time.time()
lst = []
for i in range(10000000):
lst.append(i)
t2 = time.time()
#numpy生成10000000长度数组
t3 = time.time()
lst = np.array(range(10000000))
t4 = time.time()
#耗时
print(t2-t1)
print(t4-t3)
#1.5315017700195312
#1.3233845233917236
2. numpy.arange()
arange()方法常用于通过参数直接生成一个等差数列,也即一维数组
np.arange([start,] stop[, step,], dtype=None)
#仅列举常用的参数
#start 数组起始值,可选,默认为0
#stop 数组结束值,不包含尾
#step 数组创建时步长,可选,默认为1
#dtype 指定数据类型,可选,不传由方法自己决定类型
#e.g
print(np.arange(10)) #输出: [0 1 2 3 4 5 6 7 8 9]
print(np.arange(1,10,2)) #输出:[1 3 5 7 9]
print(np.arange(1,10,2,dtype=float)) #输出: [1. 3. 5. 7. 9.]
3. numpy.reshape()
numpy中的变形函数,能把array和arange产生的数组转换成目标维度数组,方便后续的使用,可以结合array和arange方法使用
支持:
低维数组转为高维数组
高维数组转为低维数组
np.reshape(a, shape, order='C')
也可以写成
a.reshape(shape)
#a 待变换维度的数组
#shape 目标维度形状,以元组表示(1,2,3)或(1,2)
#order 参数是用作排序,可crtl跳转源码了解,某些场景才需要控制,一般按行存储'C' 按列存储‘F’ 按原始数组排序'A',不常用,可选
#e.g
#一维数组
a = np.arange(12)
print(a)
#输出: [ 0 1 2 3 4 5 6 7 8 9 10 11]
#一维数组转为二维,6行2列
b = a.reshape((6,2))
print(b)
#输出:
[[ 0 1]
[ 2 3]
[ 4 5]
[ 6 7]
[ 8 9]
[10 11]]
#一维数组转为三维,可以理解为线转为x,y,z空间坐标系
c = a.reshape((3,2,2))
print(c)
#输出:
[[[ 0 1]
[ 2 3]]
[[ 4 5]
[ 6 7]]
[[ 8 9]
[10 11]]]
#三维转为二维
d = c.reshape((3,4))
print(d)
#输出:
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
PS:高维数组转为一维数组还有另一个方法
numpy.flatten()
flatten()是NumPy数组对象的一个方法,常用于将多维数组”展平”成一维数组。
特点:不需要知道数组长度不管数组是几维,迅速以一维呈现
#三维数组
a = np.arange(12).reshape((3,2,2))
print(a)
#输出:
[[[ 0 1]
[ 2 3]]
[[ 4 5]
[ 6 7]]
[[ 8 9]
[10 11]]]
#将三维数组直接变成一维数组
q = a.flatten()
print(q)
#输出:[ 0 1 2 3 4 5 6 7 8 9 10 11]
转置换轴
仅用于一,二维数组操作,也属于一种变形,但本身不移动数据,只是改变元素的索引方式
转置操作会交换数组的行和列,即原数组的第i行第j列元素会变成转置后数组的第j行第i列元素
1. 元素对象.T
T属性直接交换数组行列
a = np.arange(12).reshape((6,2))
print(a.shape) #输出(6,2)
print(a.T.shape) #输出(2,6)
2. 元素对象.swapaxes(1,0)
swapaxes方法也是直接交换数组的1,0轴,1和0只是形参,顺序可以交换
a = np.arange(12).reshape((6,2))
print(a.shape) #输出(6,2)
print(a.swapaxes(1,0).shape) #输出(2,6)
3. 元素对象.transpose
transpose()也有参数
x.transpose((0,1))表示按照原坐标轴改变序列,也就是保持不变
x.transpose((1,0))表示交换'0轴’和'1轴’
a = np.arange(12).reshape((6,2))
print(a.shape) #输出:(6, 2)
print(a.transpose().shape) #输出:(2, 6)
print(a.transpose((0,1)).shape) #输出:(6, 2)
print(a.transpose(1,0).shape) #输出:(2, 6)
numpy数组对象几大属性
数组对象.ndim
ndim属性用于获取数组的维数,它告诉你该数组是几维数组
a = np.arange(12).reshape((3,2,2))
print(a.ndim) #输出:3
q = a.flatten()
print(q.ndim) #输出:1
数组对象.shape
shape 属性返回数组在每个维度上大小的元组。即arange方法中的shape参数。
对于一维数组,它返回一个表示数组长度的元组
对于二维数组,它返回表示行数和列数的元组
a = np.arange(12).reshape((3,2,2))
print(a.shape) #输出:(3, 2, 2)
q = a.reshape((6,2))
print(q.shape) #输出:(6, 2)
b = a.flatten()
print(b.shape) #输出:(12,)
数组对象.dtype
dtype 属性用于获取数组元素的数据类型。arange方法里也有该属性指定
a = np.arange(12,dtype=float)
print(a.dtype) #输出:float64
a = np.arange(12)
print(a.dtype) #输出:int32
数组对象.size
size属性用于获取数组长度,比较好理解,即告诉你这个数组不管几维,里面包含了几个数组元素
a = np.arange(12).reshape((3,2,2))
print(a.size) #输出: 12
a = np.arange(12)
print(a.size) #输出: 12
一些特殊数组用法
numpy.ones()
np.ones(shape,dtype,order)
#参数作用和arange方法一致
#shape 指定数组几维什么形状
#dtype 指定数据类型,可选,默认自己根据输入决定
#order 排序 可选
#也能创建指定形状数组,但默认元素以1填充
a = np.ones((6,2))
print(a)
#输出:
[[1. 1.]
[1. 1.]
[1. 1.]
[1. 1.]
[1. 1.]
[1. 1.]]
numpy.ones_like()
ones_like() 以某个数组为目标,按照其形状进行复制,但默认以1填充元素
np.ones_like(a,dtype,subok=True)
#a 待复制形状的目标数组对象
#dtype 数据类型
#subok 这是一个可选参数,默认为 False。一般用于带有掩码的数据
a = np.arange(12).reshape((6,2))
print(a)
#输出:
[[ 0 1]
[ 2 3]
[ 4 5]
[ 6 7]
[ 8 9]
[10 11]]
a = np.ones_like(a)
print(a)
#输出:
[[1 1]
[1 1]
[1 1]
[1 1]
[1 1]
[1 1]]
numpy.full()
full()和one()一样,创建指定形状数组,但one默认以1填充,full默认通过指定的内容填充
np.full(shape,fill_value,dtype=None,order='C')
# shape 指定数组形状
# fill_value 指定填充的内容
#dtype 指定数据类型,可选
#order 排序,可选
#e.g
a = np.full((6,2),'a')
print(a)
#输出:
[['a' 'a']
['a' 'a']
['a' 'a']
['a' 'a']
['a' 'a']
['a' 'a']]
numpy.full_like()
和one_like()一样,以目标数组为蓝本,复制形状,以指定内容填充数组
numpy.full_like(a,fill_value=1,dtype)
#a 待复制的目标数组对象
#fill_value 指定填充的内容
#e.g
a = np.arange(12).reshape((6,2))
print(a)
#输出:
[[ 0 1]
[ 2 3]
[ 4 5]
[ 6 7]
[ 8 9]
[10 11]]
a = np.full_like(a, fill_value=1)
print(a)
#输出:
[[1 1]
[1 1]
[1 1]
[1 1]
[1 1]
[1 1]]