浅谈()的⽤法和t()的⽤法说
明
()有两种⽤法:
(condition,x,y)
满⾜条件(condition),输出x,不满⾜输出y。
如果是⼀维数组,相当于[xvifcelyvfor(c,xv,yv)inzip(condition,x,y)]
>>>aa=(10)
>>>(aa,1,-1)
array([-1,1,1,1,1,1,1,1,1,1])#0为Fal,所以第⼀个输出-1
>>>(aa>5,1,-1)
array([-1,-1,-1,-1,-1,-1,1,1,1,1])
>>>([[True,Fal],[True,True]],#官⽹上的例⼦
[[1,2],[3,4]],
[[9,8],[7,6]])
array([[1,8],
[3,4]])
上⾯这个例⼦的条件为[[True,Fal],[True,Fal]],分别对应最后输出结果的四个值。第⼀个值从[1,9]中选,因为条件为
True,所以是选1。第⼆个值从[2,8]中选,因为条件为Fal,所以选8,后⾯以此类推。类似的问题可以再看个例⼦:
>>>a=10
>>>([[a>5,a<5],[a==10,a==7]],
[["chon","notchon"],["chon","notchon"]],
[["notchon","chon"],["notchon","chon"]])
array([['chon','chon'],
['chon','chon']],dtype='
(condition)
只有条件(condition),没有x和y,则输出满⾜条件(即⾮0)元素的坐标(等价于o)。这⾥的坐标以tuple的形式给
出,通常原数组有多少维,输出的tuple中就包含⼏个数组,分别对应符合条件元素的各维坐标。
>>>a=([2,4,6,8,10])
>>>(a>5)#返回索引
(array([2,3,4]),)
>>>a[(a>5)]#等价于a[a>5]
array([6,8,10])
>>>([[0,1],[1,0]])
(array([0,1]),array([1,0]))
上⾯这个例⼦条件中[[0,1],[1,0]]的真值为两个1,各⾃的第⼀维坐标为[0,1],第⼆维坐标为[1,0]。
下⾯看个复杂点的例⼦:
>>>a=(27).reshape(3,3,3)
>>>a
array([[[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]]])
>>>(a>5)
(array([0,0,0,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2]),
array([2,2,2,0,0,0,1,1,1,2,2,2,0,0,0,1,1,1,2,2,2]),
array([0,1,2,0,1,2,0,1,2,0,1,2,0,1,2,0,1,2,0,1,2]))
#符合条件的元素为
[6,7,8]],
[[9,10,11],
[12,13,14],
[15,16,17]],
[[18,19,20],
[21,22,23],
[24,25,26]]]
所以会输出每个元素的对应的坐标,因为原数组有三维,所以tuple中有三个数组。
需要注意的⼀点是,输⼊的不能直接是list,需要转为array或者为array才⾏。⽐如range(10)和(10)后者返回的是数
组,使⽤才能达到效果。
t()的⽤法
t(a,axis=-1,kind='quicksort',order=None)
argsort(a)#获取a从⼩到⼤排列的数组
argsort(-a)#获取a从⼤到⼩排列的数组
argmin(a)#获取a最⼩值下标
argmax(a)#获取a最⼤值下标
功能:将矩阵a按照axis排序,并返回排序后的下标
参数:a:输⼊矩阵,axis:需要排序的维度
返回值:输出排序后的下标
(⼀维数组)
importnumpyasnp
x=([1,4,3,-1,6,9])
t()
#array([3,0,1,2,4,5],dtype=int64)
可以发现,argsort()是将X中的元素从⼩到⼤排序后,提取对应的索引index,然后输出到y
如x[3]=-1最⼩,x[5]=9最⼤
所以取数组x的最⼩值可以写成:
x[t()[0]]
或者⽤argmin()函数
x[()]
数组x的最⼤值,写成:
x[t()[-1]]#-1代表从后往前反向的索引
或者⽤argmax()函数,不再详述
x[()]
输出排序后的数组
x[t()]
#或
x[t(x)]
(⼆维数组)
x=([[1,5,4],[-1,6,9]])
#[[154]
#[-169]]
沿着⾏向下(每列)的元素进⾏排序
t(x,axis=0)
#array([[1,0,0],
#[0,1,1]],dtype=int64)
沿着列向右(每⾏)的元素进⾏排序
t(x,axis=1)
#array([[0,2,1],
#[0,1,2]],dtype=int64)
补充:l_index()和t()
由于编程和⽂笔都较差,写的不好请见谅...
今天下午学习LDA模型的python实现,其中⽤到了Numpy库,想详细了解⽤到的每个函数,便在⽹上找资料。
其中遇到了l_index()和t(),看了好半天才弄懂orz⼼⾎来潮记录⼀下
讲讲我对t()的理解:
t(a,axis=-1,kind='quicksort',order=None)
参数说明:a要排序的数组,
axis整型或者None,如果是None,数组将变成扁平数组(即变成⼀⾏数组)
kind排序算法,快排,归并排序,堆排序...
order⾃定义字段顺序
返回:index_array:n维下标数组
实例:⼀维数组
⼆维数组
然后讲讲我对l_index的理解~
l_index(indices,dims,order='C')
参数说明:indices数组
dims数组的维度⼤⼩
order:{C,F}(C⾏为主,F列为主)
返回:unraveled_coords为n维数组的元组
实例:这个地⽅想了好久才明⽩TT
简单解释⼀下,22/6=3......4
总算写完了!
以上为个⼈经验,希望能给⼤家⼀个参考,也希望⼤家多多⽀持。如有错误或未考虑完全的地⽅,望不吝赐教。
本文发布于:2022-12-09 02:00:44,感谢您对本站的认可!
本文链接:http://www.wtabcd.cn/fanwen/fan/88/69657.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |