numpy.partition(a, kth, axis=- 1,)
把指定轴上按顺序排好的第k个元素,放置到k位置上。
a = np.array([3, 4, 2, 1])
np.partition(a, 3)
array([2, 1, 3, 4])
np.partition(a, (1, 3))
array([1, 2, 3, 4])
split(ary, indices_or_sections, axis=0)
把一个数组从左到右按顺序切分
参数:
ary:要切分的数组
indices_or_sections:如果是一个整数,就用该数平均切分,如果是一个数组,为沿轴切分的位置(左开右闭)
axis:沿着哪个维度进行切向,默认为0,横向切分。为1时,纵向切分
>>> x = np.arange(9.0)
>>> np.split(x, 3)
[array([ 0., 1., 2.]), array([ 3., 4., 5.]), array([ 6., 7., 8.])]
>>> x = np.arange(8.0)
>>> np.split(x, [3, 5, 6, 10])
[array([ 0., 1., 2.]),
array([ 3., 4.]),
array([ 5.]),
array([ 6., 7.]),
array([], dtype=float64)]
numpy.any()
Test whether any array element along a given axis evaluates to True.
Returns single boolean unless axis is not None
>>>a=np.array([[1,0,0],[0,0,0]])
>>>np.any(a,axis=0)
[ True False False]
numpy.all()
Test whether all array elements along a given axis evaluate to True
>>> np.all([[True,False],[True,True]], axis=0)
array([ True, False], dtype=bool)
numpy.nonzero()
>>> x = np.array([[1,0,0], [0,2,0], [1,1,0]])
>>> x
array([[1, 0, 0],
[0, 2, 0],
[1, 1, 0]])
>>> np.nonzero(x)
(array([0, 1, 2, 2], dtype=int64), array([0, 1, 0, 1], dtype=int64))
numpy.meshgrid()
>>> a=np.array([[[1,1],[1,2]]])
>>> b=np.array([[2,3,4],[5,6,7]])
>>> c=np.meshgrid(a,b)
[array([[1, 1, 1, 2],
[1, 1, 1, 2],
[1, 1, 1, 2],
[1, 1, 1, 2],
[1, 1, 1, 2],
[1, 1, 1, 2]]), array([[2, 2, 2, 2],
[3, 3, 3, 3],
[4, 4, 4, 4],
[5, 5, 5, 5],
[6, 6, 6, 6],
[7, 7, 7, 7]])]
numpy.where(condition[, x, y])
Return elements, either from x or y, depending on condition. If only condition is given, return condition.nonzero().
>>> np.where([[True, False], [True, True]],
... [[1, 2], [3, 4]],
... [[9, 8], [7, 6]])
array([[1, 8],
[3, 4]])
numpy.pad(condition[, x, y])
>>>array = np.array([[1, 1],[2,2]])
>>>ndarray=np.pad(array,((1,1),(2,2)),'constant', constant_values=(0,3))
array [[1 1]
[2 2]]
ndarray= [[0 0 0 0 3 3]
[0 0 1 1 3 3]
[0 0 2 2 3 3]
[0 0 3 3 3 3]]
‘wrap’——表示用原数组后面的值填充前面,前面的值填充后面
‘constant’——表示连续填充相同的值,每个轴可以分别指定填充值,constant_values=(x, y)时前面用x填充,后面用y填充,缺省值填充0
numpy.maximum(x1, x2[, out])
>>np.maximum([0.5, 2],np.eye(2)) # broadcasting
[[1. 2. ]
[0.5 2. ]]
>>b=np.array([[2,3,4],[5,6,7],[8,9,10]])
>>b[[1,2],[1,2]]
[ 6 10]
numpy.maximum(x1, x2[, out])
>>> x = np.arange(12)
>>> np.split(x, 3)
[array([0, 1, 2, 3]), array([4, 5, 6, 7]), array([ 8, 9, 10, 11])]
>>>
>>> x = np.arange(8.0)
>>> np.split(x, [3, 5, 6, 10])
[array([ 0., 1., 2.]),
array([ 3., 4.]),
array([ 5.]),
array([ 6., 7.]),
array([], dtype=float64)]
numpy.expand_dims(a, axis)
similar to torch.unsqueeze()
numpy.flatten()
return a 1-d array
切片
>>> a=np.array([[0,0,0],[0,0,0]])
>>> a[[0,1],[0,1]]=1
[[1 0 0]
[0 1 0]]
>>> a=np.array([[0,0,0],[0,0,0]])
>>> a[[0,1],0]=1
[[1 0 0]
[1 0 0]]
以下情况中b中的值被当做a中第0维的index
>>>a=np.array([1,2,3,4])
>>>b=np.array([(0, 1), (2, 1), (0, 3), (2, 3)])
>>>print(a[b])
[[1 2]
[3 2]
[1 4]
[3 4]]
>>>a=np.array([[1,2,3],[4,5,6],[7,8,9]])
>>>b=np.array([[0,1],[1,0]])
>>>print(a[b])
[[[1 2 3]
[4 5 6]]
[[4 5 6]
[1 2 3]]]
>>>a=np.array([[1,2,3],[4,5,6],[7,8,9]])
>>>print(a[a>4])
[5 6 7 8 9]
以下第一个b中的值被当成a第0维的index,第二个b当成第1维的index
>>>a=np.array([[1,2,3],[4,5,6],[7,8,9]])
>>>b=np.array([0,1])
print(a[(b,b)])
[1 5]
>>a=np.array([[1,2,3],[4,5,6],[7,8,9]])
>>b=np.array([[0,1],[1,0]])
print(a[(b,b)])
[[1 5]
[5 1]]
假设a [h,w,m,2], b[k,2] 其中b中保存的是h,w对应维度的索引。
那么a[b[:,0],b[:,1]]的维度应该[k,m,2]
a=np.array([[[1,2,3],[4,5,6]],[[7,8,9],[10,11,12]]])
b=np.array([0,1])
c=np.array([0])
print(a[b,c,:])
[[1 2 3]
[7 8 9]]
numpy.sum()
>>a=array([[[ 0, 1, 2],
[ 3, 4, 5]],
[[ 6, 7, 8],
[ 9, 10, 11]]])
>>> b=np.sum(a,axis=(0,1)) #分别在axis=0 和 1两个方向上进行求和
>>> b
array([18, 22, 26])
np.sum(a,axis=(0,1))相当于np.sum(np.sum(a,axis=0),axis=0)
numpy.tile
>>> a = np.array([0, 1, 2])
>>> np.tile(a, 2)
array([0, 1, 2, 0, 1, 2])
>>> np.tile(a, (2, 2))
array([[0, 1, 2, 0, 1, 2],
[0, 1, 2, 0, 1, 2]])
>>> np.tile(a, (2, 1, 2))
array([[[0, 1, 2, 0, 1, 2]],
[[0, 1, 2, 0, 1, 2]]])
numpy.ogrid
第一个数组的步长为1,第二数组的步长为2
x,y = np.ogrid[0:10:1,0:10:2]
print(x,np.shape(x))
print(y,np.shape(y))
scipy.optimize.leastsq
最简单的应用根据一系列采样点X和Y,为直线y=kx+b求出k,b,这里k和b打包成一个参数p
def func(p,x):
k,b=p
return k*x+b
def error(p,x,y,s):
print s
return func(p,x)-y #x、y都是列表,故返回值也是个列表
对于error函数来说,直线参数p,采样点都是输入参数,但是leastsq通过把采样点X,Y放在args中,来实现只优化p。
Para=leastsq(error,p0,args=(X,Y)),通过在p0附近不断迭代,使error接近于0.
广播操作里的坑点
一个列向量减去行向量会得到一个矩阵
import numpy as np
a=np.array([1,2,3])
b=np.array([[1],[2],[3]])
print(a-b)
[[ 0 1 2]
[-1 0 1]
[-2 -1 0]]
np.argwhere
>>> x = np.arange(6).reshape(2,3)
>>> x
array([[0, 1, 2],
[3, 4, 5]])
>>> np.argwhere(x>1)
array([[0, 2],
[1, 0],
[1, 1],
[1, 2]])
cumsum
import numpy as np
c=[[1,2,3],[4,5,6],[7,8,9]]
np.cumsum(c,axis=0)
axis=0,代表以行方式扫描,第一次扫描第一行,第二次扫描第二行,以此类推。
#第一行扫描时,没有前几行可累加,所以数值不变。扫描到第二行,累加前几行,以此类推。
array([[ 1, 2, 3],
[ 5, 7, 9],
[12, 15, 18]])
searchsorted
np.searchsorted(a, v, side=‘left’, sorter=None)
在数组a中插入数组v(并不执行插入操作),返回一个下标列表,这个列表指明了v中对应元素应该插入在a中那个位置上
unique
a = np.unique(A)
对于一维数组或者列表,unique函数去除其中重复的元素,并按元素由大到小返回一个新的无元素重复的元组或者列表
cbrt
np.cbrt([1,8,27])
array([ 1., 2., 3.])
dstack
vstack是在0轴合并,hstack是在1轴合并
dstack是是轴2合并。dstack([a,b])把a和b摞在一起,像一摞扑克牌一样。
a = np.array([1,2])
b = np.array([3,4])
print(np.dstack((a,b)))
# [[[1 3]
# [2 4]]]
slice
>>>myslice = slice(5) # 设置截取5个元素的切片
>>> myslice
slice(None, 5, None)
>>> arr = range(10)
>>> arr
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> arr[myslice] # 截取 5 个元素
[0, 1, 2, 3, 4]
>>>