numpy.transpose()
该函数为矩阵交换维度,列如:
矩阵:
arr = np.arange(8).reshape((2, 4))
'''
[[0 1 2 3]
[4 5 6 7]]
'''
arr.transpose((1, 0))
'''
[[0 4]
[1 5]
[2 6]
[3 7]]
'''
即对矩阵进行转置,transpose(1, 0, 2)也是交换第一维和第二维,但不是对矩阵转置,部分高维矩阵要相乘需要转置可以使用transpose(-2, -1)
numpy.triu()
arr = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]])
'''
[[ 1 2 3 4]
[ 5 6 7 8]
[ 9 10 11 12]
[13 14 15 16]]
'''
np.tril(arr, k=-1) #倒三角矩阵
'''
[[ 0 0 0 0]
[ 5 0 0 0]
[ 9 10 0 0]
[13 14 15 0]]
'''
np.triu(arr, k=1) #正三角矩阵
'''
[[ 0 2 3 4]
[ 0 0 7 8]
[ 0 0 0 12]
[ 0 0 0 0]]
'''
numpy.size(a, axis=None)
a:输入的矩阵
axis:int型的可选参数,指定返回哪一维的元素个数。当没有指定时,返回整个矩阵的元素个数。
lambda
python中,lambda函数也叫匿名函数,及即没有具体名称的函数,它允许快速定义单行函数,类似于C语言的宏,可以用在任何需要函数的地方。这区别于def定义的函数。
lambda与def的区别:
1)def创建的方法是有名称的,而lambda没有。
2)lambda会返回一个函数对象,但这个对象不会赋给一个标识符,而def则会把函数对象赋值给一个变量(函数名)。
3)lambda只是一个表达式,而def则是一个语句。
4)lambda表达式” : “后面,只能有一个表达式,def则可以有多个。
5)像if或for或print等语句不能用于lambda中,def可以。
6)lambda一般用来定义简单的函数,而def可以定义复杂的函数。
6)lambda函数不能共享给别的程序调用,def可以。
lambda语法格式:
lambda [arg1 [, agr2,.....argn]] : expression
scatter_(input, dim, index, src) → Tensor
将src中的所有值按照index确定的索引写入tensor中。其中索引是根据给定的dimension,dim按照gather()描述的规则来确定。
注意,index的值必须是在_0_到_(self.size(dim)-1)_之间,
参数: - input (Tensor)-源tensor - dim (int)-索引的轴向 - index (LongTensor)-散射元素的索引指数 - src (Tensor or float)-散射的源元素
x = torch.rand(2, 5)
print(x)
y = torch.zeros(3, 5).scatter_(0, torch.LongTensor([[0, 1, 2, 0, 0], [2, 0, 0, 1, 2]]), x)
print(torch.LongTensor([[0, 1, 2, 0, 0], [2, 0, 0, 1, 2]]))
print(y)
'''
tensor([[0.1989, 0.4622, 0.6161, 0.6048, 0.4673],
[0.9271, 0.5102, 0.3415, 0.2307, 0.9145]])
tensor([[0, 1, 2, 0, 0],
[2, 0, 0, 1, 2]])
tensor([[0.1989, 0.0000, 0.3415, 0.6048, 0.4673],
[0.0000, 0.5102, 0.0000, 0.2307, 0.0000],
[0.9271, 0.0000, 0.6161, 0.0000, 0.9145]])
'''