python(杂)不定时更新

记录遇到的一些问题以及知识点。。菜鸟一只,有问题欢迎批评指正。

  • cuda上面的变量类型只能是tensor,不能是其他的类型。、
  • 将cuda上的tensor转换为numpy:
>>>A.cpu().detach().numpy()  #转换为cpu模式,截断梯度反向传播,转numpy

二、ndarray

  • numpy: 可采用ones/ zeros/ eye/ diag/ random.randint等创建矩阵
  • 对于ndarray求和如:
>>>a = np.random.randint(0,30,(2,3))
>>> a
array([[22, 11,  1],
       [ 8, 21, 27]])
>>> l = []
>>> l.append(a)
>>> l
[array([[22, 11,  1],
       [ 8, 21, 27]])]
>>> b = np.random.randint(0,30,(2,3))
>>> b
array([[16,  5, 16],
       [18,  7, 25]])
>>> l.append(b)
>>> c = np.random.randint(0,30,(2,3))
>>> l.append(c)
>>> l
[array([[22, 11,  1],
       [ 8, 21, 27]]), array([[16,  5, 16],
       [18,  7, 25]]), array([[17, 15,  0],
       [24, 29, 20]])]
>>> sum(l)
array([[55, 31, 17],
       [50, 57, 72]])
>>> sum(l)/6
array([[ 9.16666667,  5.16666667,  2.83333333],
       [ 8.33333333,  9.5       , 12.        ]])
  • 查看array中是否有nan(Not A Number,任何与nan相关的计算都返回nan)

查看是否为nan值:True为nan

>>> np.isnan(array)

判断array中有无nan值:np.isnan(array).any()。
1> .any():如果所有元素均为空、0、false,则返回False,否则为True。(有一个真"True",则真"True";所有元素均假"False",才假"False")

>>> np.array([0,1,2,3]).any()                                                                                             
True
>>> np.array([6,1,2,3]).any()                                                                                             
True
>>> np.array([0,0,0,0]).any()                                                                                             
False

2> .all():可判断array中有无为False的元素(0、空、None、False均为False),如果有,则为False,否则为True.(所有均真"True",才真"True";有一个元素假"False",则假"False")

>>> np.array([6,1,2,3]).all()                                                                                             
True
>>> np.array([0,1,2,3]).all()                                                                                             
False
>>> np.array([0,0,0,0]).all()                                                                                             
False
  • np.repeat,np.tile()复制

  • array和asarray都可以将结构数据转化为ndarray,但是主要区别就是当数据源是ndarray时,array仍然会copy出一个副本,占用新的内存,但asarray不会。即当源array被改变,由array得到的矩阵不会改变(两者所占内存不同),而ndarray得到的矩阵会发生改变。

  • 行连续指数组中同一行相邻元素在内存中的位置也是相邻的(内存地址实际为一维)。Numpy中,随机初始化的数组默认都是C连续的,经过不规则的slice操作,则会改变连续性,可能会变成既不是C连续,也不是Fortran连续的。
    Numpy可以通过.flags熟悉查看一个数组是C连续还是Fortran连续的。
    若数组不连续,可利用copy()创建一个连续的副本

  • 将numpy扩展维数:

>>>A = np.array([1,2,3])
>>>A[:,None]
array([[1],[2],[3]])  #不改变A本身维度
>>>#np.hstack([A[:, None]])
#array([[1],[2],[3]])

三、tensor

1>

>>>torch.mm(A,B)    #矩阵A,B相乘(只用于二维)高维应用torch.matmul()
>>>torch.mul(A,B)   #矩阵A,B对应位相乘,矩阵维度不同时会自动填充
>>>torch.randn(2,3) #生成2X3的正态分布的的tensor
>>>torch.mean()     #求均值,可指定维度
>>>torch.pow(A,n)   #对A中各元素求n次幂
>>>torch.add(A,n)   #A中各元素值均加n;torch.add(A,n,b)A中各元素加n*b
>>>torch.div(A,B)   #或torch.div(A,n)前者为两张量对应位相除,后者为A逐位除标量n
>>>torch.exp(a)     #指数

2>

>>> a
tensor([[ 9, 24, 10, 17],
        [27, 27, 22, 19]])
>>> a.select(0, 0)
tensor([ 9, 24, 10, 17])
>>> a.select(0, 1)
tensor([27, 27, 22, 19])
>>> a.select(1, 0)
tensor([ 9, 27])
>>> a.narrow(1, 1, 1)
tensor([[24],
        [27]])
>>> a.narrow(1, 0, 1)
tensor([[ 9],
        [27]])
>>> a.narrow(1, 0, 0)
tensor([], size=(2, 0), dtype=torch.int64)
>>> a.narrow(0, 1, 0)
tensor([], size=(0, 4), dtype=torch.int64)
>>> a.narrow(0, 1, 3)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
RuntimeError: start (1) + length (3) exceeds dimension size (2).
>>> a.narrow(0, 0, 1)
tensor([[ 9, 24, 10, 17]])

四、nan

  • 可以利用nan != nan的性质来查找nan.
>>> np.nan != np.nan                                                                                                                     
True
>>> (W != W).sum() #不为0则nan值存在
  • np.isnan(A)可判断A是否为nan值;(类似的,np.isinf(A)可判断A是否为inf)

参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值