numpy笔记

.

Numpy创建数组

从无到有

numpy.empty(shape,dtype=int,order=’C’)

创建一个未初始化的数组

shape:形状

dtype:数据类型

order:”C”行优先,”F”列优先

numpy.zeros(shape,dtype=int,order=’C’)

创建全0数组

numpy.ones(shape,dtype=int,order=’C’)

创建全1数组

从已有创建新的

numpy.asarray(a,dtype=float,order=’C’)

a可以是列表

numpy.frombuffer(buffer, dtype = float, count = -1, offset = 0)从流读取

count:默认-1读取所有

offset:读取位置,默认为0

numpy.fromiter(iterable,dtype,count=-1)

从可迭代对象读取

从数值范围创建新的

numpy.arange(start,stop,step,dtype)

start:默认为0

stop:终止值(不包含)

step:步长,默认为1

dtype:数据类型

numpy.linspace(start,stop,num=50,endpoint=True,retstep=False,dtype=None)

endpoint:是否包含终止值,默认为True

retstep:是否包含步长

numpy.logspace(start, stop, num=50, endpoint=True, base=10.0, dtype=None)

start:起始阶

stop:终止阶

base:底数

花式索引

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
>>> import numpy as np
>>> a=np.arange(32).reshape(8,4)
>>> print(a)
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]
[12 13 14 15]
[16 17 18 19]
[20 21 22 23]
[24 25 26 27]
[28 29 30 31]]
>>> print(a[[4,2,1,7]])
[[16 17 18 19]
[ 8 9 10 11]
[ 4 5 6 7]
[28 29 30 31]]

多个数组索引

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
>>> import numpy as np
>>> a=np.arange(32).reshape(8,4)
>>> print(a)
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]
[12 13 14 15]
[16 17 18 19]
[20 21 22 23]
[24 25 26 27]
[28 29 30 31]]
>>> print(a[np.ix_([1,5,7,2],[0,3,1,2])])
[[ 4 7 5 6]
[20 23 21 22]
[28 31 29 30]
[ 8 11 9 10]]

广播(BroadCast)

当两个数组长度和维数相同,则算术运算是对应位的算术运算

若长度不相同,则将短的扩充到与长的长度相同再运算

规则(来自菜鸟教程):

  • 数组拥有相同形状。
  • 当前维度的值相等。
  • 当前维度的值有一个是 1。

数组迭代

numpy.nditer(a,order=’C’)

迭代顺序C风格行优先,F风格列优先

数组操作

修改数组形状

函数 作用
reshape 不改变数据条件下修改形状
flat 数组元素迭代器
flatten 返回一份数组拷贝,对拷贝做修改不影响原始数据
ravel 返回展开数组

numpy.reshape(arr,newshape,order=’C’)

arr:原数组

newshape:整数或整数数组

order:C按行,F按列,A原顺序,K元素在内存中的顺序

numpy.ndarray.flat

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
>>> import numpy as np
>>> a=np.arange(10)
>>> for i in a.flat:
... print(i)
...
0
1
2
3
4
5
6
7
8
9

numpy.ndarray.flatten(order=’C’)

1
2
3
4
5
6
>>> a=np.arange(8).reshape(2,4)
>>> print(a)
[[0 1 2 3]
[4 5 6 7]]
>>> print(a.flatten(order='K'))
[0 1 2 3 4 5 6 7]

numpy.ravel(a,order=’C’)

将数组展平

1
2
3
4
5
>>> b=np.arange(1,65).reshape(4,4,4)
>>> print(b.ravel())
[ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64]

翻转数组

numpy.trranspose(arr,axes)

arr:要操作的数组

axes:对应维度

numpy.ndarray.T

与上相同

numpy.rollaxis(arr,axis,start)

arr:数组

axis:要向后滚动的轴

start:默认为0

numpy.swapaxes(arr,axis1,axis2)

arr:输入的数组

axis1:第一个轴

axis2:第二个轴

修改维度

numpy.broadcast_to(array,shape,subok)

将array广播到shape形状

numpy.expand_dims(arr,axis)

在指定位置插入新的轴

numpy.squeeze(arr,axis)

从arr中删除axis维坐标

连接数组

numpy.concatenate((a1,a2,…),axis)

沿现有轴连接形状相同的两个或多个数组

numpy.stack(arrays,axis)

沿新轴连接新序列

numpy.hstack(arrays)

水平堆叠

numpy.vstack(arrays)

垂直堆叠

分割数组

numpy.split(ary,indices_or_sections,axis)

ary:数组

indices_or_sections:如果是整数,为分成多少部分,如果是数组,则是在哪里开始分

axis:沿哪个方向切分

numpy.hsplit(ary,nums)

水平切分

numpy.vsplit(ary,nums)

垂直切分

数组元素添加与删除

numpy.resize(arr,shape)

与reshape作用差不多

numpy.append(arr,values,axis=None)

当axis为None时,返回的是一维数组

numpy.insert(arr,obj,values,axis)

未提供axis数组会被展开

numpy.delete(arr,obj,axis)

未传递axis数组会被展开

numpy.unique(arr,return_index,return_inverse,return_count)

arr:输入数组

return_index:返回新数组元素在旧列表中的位置

return_inverse:返回旧数组元素在新列表中的位置

return_count:返回每个元素的个数

位运算

bitwise_and对元素数组执行位运算

bitwise_or对元素数组执行或运算

invert按位取反

left_shift向左移动二进制

right_shift向右移动二进制

binary_repr二进制表示

字符串函数

字符串函数与python自带的string方法类似

数学函数

sin、cos、tan、arcsin、arccos、arctan、degrees、around、floor(小于或等于指定表达式的最大整数,向下取整)、ceil(向上取整)

算术函数

add、subtract、multiply、divide、reciprocal(倒数)、power(幂)、mod、remainder(取余)

统计函数

amin、amax(计算指定轴的最小最大值)ptp(计算数组元素最大值与最小值的差值)

percentile(百分位数)

1
2
3
4
5
6
7
8
9
import numpy as np
a=np.array([[4,8,6],[2,3,9]])
print(np.percentile(a,50))
print(np.percentile(a,50,axis=0,keepdims=True))
print(np.percentile(a,50,axis=1,keepdims=True))
5.0
[[3. 5.5 7.5]]
[[6.]
[3.]]

median(中位数)、mean(平均数)、average(加权平均数)、std(标准差)、var(方差)