numpy函数

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]
>>>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值