【无标题】

np.unique和pd.nunique

np.unique用法
返回参数数组中所有不同的值,并按照从小到大排序,用于list
pd.nunique()
可直接统计dataframe中每列的不同值的个数,也可用于series,但不能用于list.返回的是不同值的个数

import numpy as np
import pandas as pd
A = [1, 2, 1, 3, 1, 3,4]
C=pd.Series(A)
print("原列表:", A)
print("--------------------------")
# return_index=True: 返回新列表中的每个元素在原列表中第一次出现的索引值,因此元素个数与新列表中元素个数一样
# return_inverse=True:返回原列表中的每个元素在新列表中出现的索引值,因此元素个数与原列表中元素个数一样
# 返回全部三个参数值
a, s, p = np.unique(C, return_index=True, return_inverse=True)
aa=np.unique(A, return_index=True, return_inverse=True)[0]
ss=np.unique(A, return_index=True, return_inverse=True)[1]
pp=np.unique(A, return_index=True, return_inverse=True)[2]

c=C.nunique()
print(c)
print("新列表:", a)
print("aa和a一样嘛", a == aa )
print("return_index", s)
print("ss和s一样嘛", s==ss)
df=pd.DataFrame({'A':[0,1,1],'B':[0,5,6]})
print(df)
print(df.nunique())
#    A  B
# 0  0  0
# 1  1  5
# 2  1  6
# A    2
# B    3
# dtype: int64
all_user_repay = all_user_repay.groupby(['user_id'])['listing_id'].agg(['nunique']).reset_index()
#    user_id  nunique
# 0       40        1
# 1       56        1
# 2       98        1
# 3      103        1
# 4      122        1

嵌入会用到
C是索引,取a里面的值

C=pd.Series((1,2,3,4,5,0,1,4,5,1))
print(C)
a=pd.array([12,45,5,1,2,3,5])
b=a[C]
print(b)
# 0    1
# 1    2
# 2    3
# 3    4
# 4    5
# 5    0
# 6    1
# 7    4
# 8    5
# 9    1
# dtype: int64
# <IntegerArray>
# [45, 5, 1, 2, 3, 12, 45, 2, 3, 45]
# Length: 10, dtype: Int64

a.view()

作用为调整形状大小,-1为动态调整

v1 = torch.range(1, 16) 
v2 = v1.view(-1, 4) #v2的shape为4*4,

torch.matmul

矩阵相乘。对于二维,就是矩阵相乘,对于高维的,前面的维度必须要相同,然后最里面的两个维度符合矩阵相乘的形状限制:i×j,j×k。所以对于神经网络,两个维度的矩阵相乘一般需要

torch.matmul(q, k.transpose(-2, -1))

pytorch中的contiguous()

当调用contiguous()时,会强制拷贝一份tensor,让它的布局和从头创建的一模一样,但是两个tensor完全没有联系。
具体看http://t.csdn.cn/L2Nj6

masked_fill

masked_fill方法有两个参数,maske和value,mask是一个pytorch张量(Tensor),元素是布尔值,value是要填充的值,填充规则是mask中取值为True位置对应于self的相应位置用value填充。

masked_fill_(mask, value) 。in-place version 在 PyTorch 中是指当改变一个 tensor 的值的时候,不经过复制操作,而是直接在原来的内存上改变它的值。
masked_fill(mask, value)。out-of-place version 在 PyTorch 中是指当改变一个 tensor 的值的时候,经过复制操作,不是直接在原来的内存上改变它的值,而是修改复制的 tensor

可以进行广播

import torch
a=torch.tensor([[[5,5,5,5], [6,6,6,6], [7,7,7,7]], [[1,1,1,1],[2,2,2,2],[3,3,3,3]]])
print(a)
 # tensor([[[5, 5, 5, 5],
 #         [6, 6, 6, 6],
 #         [7, 7, 7, 7]],
 # 
 #        [[1, 1, 1, 1],
 #         [2, 2, 2, 2],
 #         [3, 3, 3, 3]]])
print(a.size())
#torch.Size([2, 3, 4])
mask = torch.ByteTensor([[[0]],[[1]]])
print(mask)
# tensor([[[0]],
# 
#         [[1]]], dtype=torch.uint8)
print(mask.size())
# torch.Size([2, 1, 1])
bb= a.masked_fill(mask==0, value=torch.tensor(111))#为True的时候,用111进行填充
print(bb)
# tensor([[[111, 111, 111, 111],
#          [111, 111, 111, 111],
#          [111, 111, 111, 111]],
# 
#         [[  1,   1,   1,   1],
#          [  2,   2,   2,   2],
#          [  3,   3,   3,   3]]])
mask1 = torch.tensor([True,False,False,False])
mask2 = torch.tensor([True])
print(mask1.size())
# torch.Size([4])
b = a.masked_fill(mask1, value=torch.tensor(111))#为True的时候,用111进行填充
b1 = a.masked_fill(mask1==1, value=torch.tensor(111))#True为1,False为0
b2 = a.masked_fill(mask2, value=torch.tensor(111))
print(b)
# tensor([[[111,   5,   5,   5],
#          [111,   6,   6,   6],
#          [111,   7,   7,   7]],
# 
#         [[111,   1,   1,   1],
#          [111,   2,   2,   2],
#          [111,   3,   3,   3]]])
print(b1)
# tensor([[[111,   5,   5,   5],
#          [111,   6,   6,   6],
#          [111,   7,   7,   7]],
# 
#         [[111,   1,   1,   1],
#          [111,   2,   2,   2],
#          [111,   3,   3,   3]]])
print(b2)
# tensor([[[111, 111, 111, 111],
#          [111, 111, 111, 111],
#          [111, 111, 111, 111]],
# 
#         [[111, 111, 111, 111],
#          [111, 111, 111, 111],
#          [111, 111, 111, 111]]])

torch.cumsum

q1 = torch.arange(0, 16).view(2, 2, 4)
print(q1)
w1 = torch.cumsum(q1, dim=0)  
e1 = torch.cumsum(q1, dim=1)  
r1 = torch.cumsum(q1, dim=2)  
t1 = torch.cumsum(q1, dim=-1)  
print(w1)
print(e1)
print(r1)
print(t1)
tensor([[[ 0,  1,  2,  3],
         [ 4,  5,  6,  7]],

        [[ 8,  9, 10, 11],
         [12, 13, 14, 15]]])原输出
tensor([[[ 0,  1,  2,  3],不变
         [ 4,  5,  6,  7]],不变

        [[ 8, 10, 12, 14],dim为0,第一层不变,第二层加上第一层
         [16, 18, 20, 22]]])8+09+110+2,类比
tensor([[[ 0,  1,  2,  3],不变
         [ 4,  6,  8, 10]],dim为1,第一行不变,第二行累加第一行
							4+05+16+2,类比
        [[ 8,  9, 10, 11],不变
         [20, 22, 24, 26]]])
tensor([[[ 0,  1,  3,  6],dim为2,第一列不变,后面的累加前面的列
         [ 4,  9, 15, 22]],04812不变,0+10+1+20+1+2+3类比

        [[ 8, 17, 27, 38],
         [12, 25, 39, 54]]])
tensor([[[ 0,  1,  3,  6],
         [ 4,  9, 15, 22]],

        [[ 8, 17, 27, 38],
         [12, 25, 39, 54]]])

torch.abs

返回绝对值

torch.clamp

将输入input张量每个元素的束缚在区间 [min,max],并返回结果到一个新张量
torch.clamp(input, min, max, out=None) → Tensor

unsqueeze

添加一个维度

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值