文章目录
- 数据类型
- 创建np.array
- 索引与切片
- 深拷贝与浅拷贝
- 切分
- 级联
- 排序
-
- 常用函数
-
- 一元函数
- 二元函数
- 数学统计方法
- 数组去重及集合运算
- 线性代数
- 随机数
- 数组连接函数
- 其他函数
数据类型
Numpy 的类型 |
描述 |
np.int8 |
字节(-128到127) |
np.int16 |
整数(-32768至32767) |
np.int32 |
整数(-2147483648至2147483647) |
np.int64 |
整数(-9223372036854775808至9223372036854775807) |
np.uint8 |
无符号整数(0到255) |
np.uint16 |
无符号整数(0到65535) |
np.uint32 |
无符号整数(0到4294967295) |
np.uint64 |
无符号整数(0到18446744073709551615) |
np.intp |
用于索引的整数,通常与索引相同 ssize_t |
np.uintp |
整数大到足以容纳指针 |
np.float32 |
|
np.float64 / np.float_ |
请注意,这与内置python float的精度相匹配。 |
np.complex64 |
复数,由两个32位浮点数(实数和虚数组件)表示 |
np.complex128 / np.complex_ |
请注意,这与内置python 复合体的精度相匹配。 |
bool |
存储True和False值的布尔类型 |
object |
python对象类型 |
string_ |
固定长度的字符串类型 |
unicode_ |
固定长度的unicode类型 |
创建np.array
nl = np.array([1,2,3,4])
n2 = np.array([[1,2,3],[2,3,4],[5,6,7]])
N2.shape
np.array(list('abcdeef3')).reshape(2,4)
np.ones(shape = [2,3],dtype = int)
ones = np.ones(shape =[100,80,4],dtype = float)
np.zeros
np.random.randn(5)
np.random.random(5,4)
np.random.rand
np.random.randint(55,100,size = 9)
np.arange(3,7,0.3)
索引与切片
ndarray[0,1]
np.random.randint(150,size =10)
n2[1:3]
n3 = np.arange(1,10,1)
n3[::2]
n3.reshape(2,5)
n3.reshape((-1))
深拷贝与浅拷贝
- 浅拷贝:
指向不同,里边共用元素,修改一个,另一个对应元素也会改变。a = b.view()
- 深拷贝:
指向不同,里边不共用元素,完全独立。a = b.copy()
- 副本
所有赋值运算,不会为ndarray的任何元素创建副本,对赋值后的对象操作修改,原来的对象也同样生效;
l=np.array((1,2,3))
n=l
n[1]=5
n = l.copy()
切分
三个函数完成切分工作,左闭右开
- np.split
- np.vsplit
- np.hsplit
n5 = np.random.randint(0,150,size=(5,7))
np.split(n5,(1,3)) 切成三部分,0-1切下。2-3切下。:默认切分行
照片裁剪,可以用这种方法。
np.split(n5,(1,3),axis = 1) 切分列axis=1
np.vsplit(n5,(1,3)) 默认切分行
np.hsplit(n5,(1,3)) 切分列
级联
np.concatenate 级联需要注意的点,类似于pandas的concat方法:
- 参数必须是列表:一定要加中括号或小括号
- 维度必须相同
- 形状必须相同
- 【重点】级联的方向默认是shape这个tuple的第一个值所代表的维度方向
- 可通过aixs参数改变级联方向。
a1=np.random.randint(1,10,size=(5,5))
a1.ndim 查看a1的维度
np.concatenate((a1,a1))
np.concatenate((a1,a1),axis = 1)
np.concatenate((a1,a1),axis = 0)
a2 = np.array((1,2,3))
a3 = np.vstack(a2)
a4 =np.hstack(a2)
排序
部分排序
当我们想取top-n排序输出时,可以先通过partition函数获取top元素再调用sort排序
np.partition(a,k)
- 当k为正数时,我们想要得到最小的k个数,从前往后
- 当k为负数时,我们想要得到最大的k个数,从后往前
- 先取数切片再排序,这样会快很多。
n3 = np.partition(n2,-5)[:5]
n3.sort()
快速排序
np.sort() 和ndarray.sort都可以,但有区别:
- np.sort()不改变输入,
- ndarray.sort()本地处理,不占用空间,但改变输入。原来的数据进行了改变,不占内存。
常用函数
一元函数
类型 |
说明 |
abs, fabs |
计算整数、浮点数或复数的绝对值。对于非复数值,可以使用更快的fabs。 |
sqrt |
计算各元素的平方根。相当于arr ** 0.5 |
sqare |
计算各元素的平方。相当于arr ** 2 |
exp |
计算各元素的e^x |
log, log10, log2, log1p |
分别为自然对数、底数为10的log、底数为2的log和log(1 + x)。 |
sign |
计算各元素的正负号:1(正数)、0(零)、-1(负数)。 |
ceil |
计算各元素的ceiling值,即大于等于该值的最小整数。 |
floor |
计算各元素的floor值,即小于等于该值的最小整数。 |
rint |
将各元素值四舍五入到最接近的整数,保留dtype。 |
modf |
将数组的小数部分与整数部分以两个独立数组的形式返还。 |
isnan |
返回一个表示“哪些值是NaN(这不是一个数字)”的布尔型数组 |
isfinite, isinf |
分别返回一个表示“哪些元素是有限的(非inf,非NaN)”或“哪些元素是无穷的”的布尔型数组 |
cos, cosh, sin, sinh, tan, tanh |
普通型或双曲型三角函数 |
arccos, arccosh, arcsin, arcsinh, arctan, arctanh |
反三角函数 |
logical_not |
计算各元素not x的真值。相当于-arr。 |
argmin |
最小值所在的索引 |
argmax |
最大值所在的索引 |
二元函数
类型 |
说明 |
add |
将数组中对应的元素相加 |
subtract |
从第一个数组中减去第二个数组中的元素 |
multiply |
数组元素相乘 |
divide, floor_divide |
除法或向下取整除法 |
power |
对第一个数组中的元素A和第二个数组中对应位置的元素B,计算A^B。 |
maximum, fmax |
元素级的最大值计算。fmax将忽略NaN。 |
minimum, fmin |
元素级的最小值计算。fmin将忽略NaN。 |
mod |
元素级的求模计算 |
copysign |
将第二个数组中的符号复制给第一个数组中的值 |
greater, greater_equal, less, less_equal,equal, |
执行元素级的比较,最终产生布尔型数组。 |
not_equal |
|
logical_and, logical_or, logical_xor |
执行元素级的真值逻辑运算,最终产生布尔型数组。 |
数学统计方法
类型 |
说明 |
sum |
对数组中全部或某轴向的元素求和。零长度的数组的sum为0。 |
mean |
算术平均数。零长度的数组的mean为NaN。 |
std, var |
分别为标准差和方差,自由度可调(默认为n)。 |
min, max |
最大值和最小值 |
argmin |
分别为最大值和最小值的索引 |
cumsum |
所有元素的累计和 |
cumprod |
所有元素的累计积 |
数组去重及集合运算
类型 |
说明 |
unique(x) |
计算x中的唯一元素,并返回有序结果。 |
intersect1d(x, y) |
计算x和y中的公共元素,并返回有序结果。 |
union1d(x, y) |
计算x和y的并集,并返回有序结果。 |
in1d(x, y) |
得到一个表述"x的元素是否包含于y"的布尔型数组 |
setdiff1d(x, y) |
集合的差,即元素在x中且不在y中 |
setxor1d(x, y) |
集合的异或,即存在于一个数组中但不同时存在于两个数组中的元素。 |
线性代数
常用的numpy.linalg函数
类型** |
说明 |
diag |
以一维数组的形式返回方阵的对角线(或非对角线元素),获将一维数组转换为方阵(非对角线元素为0)。 |
dot |
矩阵乘法 |
trace |
计算对角线元素的和 |
det |
计算矩阵行列式 |
eig |
计算方阵的特征值和特征向量 |
inv |
计算方阵的逆 |
pinv |
计算矩阵的Moore-Penrose伪逆 |
qr |
计算QR分解 |
svd |
计算奇异值分解 |
solve |
解线性方程Ax = b,其中A为一个方阵。 |
lstsq |
计算Ax = b的最小二乘解 |
随机数
类型 |
说明 |
seed |
确定随机数生成器的种子 |
permutation |
返回一个序列的随机排列或返回一个随机排列的返回 |
shuffle |
对一个序列就地随机乱序 |
rand |
产生均匀分布的样本值 |
randint |
从给定的上下限范围内随机选取整数 |
randn |
产生正态分布(平均值为0,标准差为1) |
binomial |
产生二项分布的样本值 |
normal |
产生正态(高斯)分布的样本值 |
beta |
产生Beta分布的样本值 |
quare |
产生卡方分布的样本值 |
gamma |
产Gamma分布的样本值 |
uniform |
产生在[0, 1]中均匀分布的样本值 |
数组连接函数
类型 |
说明 |
concatenate |
最一般化的连接,沿一条轴连接一组数组 |
vstack, row_stack |
以面向行的方式对数组进行堆叠(沿轴0) |
hstack, |
以面向行的方式对数组进行堆叠(沿轴1) |
column_stack |
类似于hstack,但是会先将一维数组转换为二维列向量。 |
dstack |
以面向“深度”的方式对数组进行堆叠(沿轴2) |
split |
沿指定轴在指定的位置拆分数组 |
hsplit, vsplit, dsplit |
split的便捷化函数,分别沿着轴0、轴1和轴2进行拆分。 |
其他函数
s = np.random.randint(1,100,sie = 1000)
np.histogram(s.values,bins = np.arange(1,100,10)) 也可以给bin直接传入整数参数。
a = np.random.random((3,4))
a.ravel()
a.shape=(4,3)
a.reshpe()
a.sort(axis =1)
a.argsort(axis =1)