Pytroch自存系列-numpy常见操作

0.一些链接


https://blog.csdn.net/qq_33431368/article/details/86579544

https://mp.weixin.qq.com/s/b8IAf-liXvgn50-3HwT1VA

1.size,shape,建立数组


import numpy as np

array = np.array([[1, 2, 3],
                  [2, 3, 4]])

print array  #numpy生成的array
print array.dtype # 每个元素的类型
print "number of dim", array.ndim # array的维度
print 'shape:', array.shape #形状, 两行三列。
print 'size:', array.size #array的大小=array中所有元素的个数
"""
        [[1 2 3]
         [2 3 4]]
        int64
        number of dim 2
        shape: (2, 3)
        size: 6
"""

print( np.arange(2,8,2))
# [2 4 6]

2.切片

numpy中 注意  b=a[:,1]  之后 

对b进行赋值  b[0,1] = 1 改变a的值   

b=b+1 不会改变a的值

---

list中切片后返回的是复制值, b[0,1] = 1 不改变a的值

3.维度变换 transpose


arr = np.arange(16).reshape((2, 2, 4))

##
array([[[ 0, 1, 2, 3],
        [ 4, 5, 6, 7]],

       [[ 8, 9, 10, 11],
        [12, 13, 14, 15]]])

arr.transpose(1,0,2)

##
array([[[ 0, 1, 2, 3],
        [ 8, 9, 10, 11]],

       [[ 4, 5, 6, 7],
        [12, 13, 14, 15]]])

## pytroch有加强版 permutate 

unpermuted=torch.tensor(a)
print(unpermuted.size())  #  ——>  torch.Size([1, 2, 3])

permuted=unpermuted.permute(2,0,1)  torch.Size([3, 1, 2])

 

4.变形  reshape  reve flatten

arr.reshape((2,-1))

arr.ravel()  
#一维数组,ravel() 按「行主序」打平时没有复制原数组,按「列主序」在打平时复制了原数组

arr.flatten()
#在打平时复制了原数组,更安全,但内存开销更大

torch.reshape()  #高级版的view(),=tensor.contiguous().view()

torch.cat((x,y),0)  #不增加维度
c=torch.stack((a,b),0) #增加新维度 1*

b_ = b.squeeze() #降维

5.分裂合并复制  concatenate  vstack tile repeat

np.concatenate([arr1, arr2], axis=0)
#通用,效率不高


np.vstack((arr1, arr2))
# vstack:v 代表 vertical,竖直合并,等价于 concatenate(axis=0)
# dstack:d 代表 depth-wise,按深度合并,深度有点像彩色照片的 RGB 通道,升维度
#效率更高




first, second, third = np.split(arr,[1,3])
#分三段,默认axis=0, :1, 1:3, 3:   维度不变[[]]
# vsplit() 和 split(axis=0) 等价,hsplit() 和 split(axis=1) 


[[0 1 2]
 [3 4 5]]
arr2d.repeat(2, axis=0) #元素复制
#[[0 1 2]
 [0 1 2]
 [3 4 5]
[3 4 5]]



np.tile(arr2d,2) #默认按列复制,整体
[[0 1 2 0 1 2]
 [3 4 5 3 4 5]]

np.tile(arr2d, (2,3))
[[0 1 2 0 1 2 0 1 2]
 [3 4 5 3 4 5 3 4 5]
 [0 1 2 0 1 2 0 1 2]
 [3 4 5 3 4 5 3 4 5]]

6.排序 sort

arr.sort(),对第一列排序,发现 arr 的元素改变了。 默认升序

np.sort(arr),对第二列排序,但是 arr 的元素不变。
np.amax(arr,axis=0)  #最大值索引
np.argmax(arg,axis=0)

arr.argsort() #提供索引

list自带reverse,numpy不行。aList.sort(reverse=True)

7.筛选 where >=

(a>=0).astype(int)  a出来形状一样,满足条件的地方为1,否则为0

np.where(x>0, 2, -2)  #满足条件的地方变2,否则变-2,高级版比较

bbb = torch.where(x > 5, torch.full_like(x, 5), x)  #输入要是tensor,把大于5的地方变为5

torch.gt(torch.Tensor([[1, 2], [3, 4]]), torch.Tensor([[1, 1], [4, 4]]))
 0  1
 0  0
[torch.ByteTensor of size 2x2]


np.where(A>0) #若A三维,则返回三元组,坐标
#(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]))


list(map(lambda x,y :x*y,[1,2,3],[4,5,6]))  -->  [4,10,18]




8.copy()  clone()

a.cpu().numpy()

clone_x = x.clone() #新内存,在计算图
detach_x = x.detach()  #共享内存,脱离计算图,会改变

clonex= x.clone.detach() #优点兼顾



import copy
a = [1,2,3,4,['a','b']]     # 赋值操作
b = a                       # 赋值操作
c = a.copy()                # 浅复制操作,还是有危险
d = copy.copy(a)            # 浅复制操作
e = copy.deepcopy(a)        # 深复制操作,最安全

a.append(5)
a[4].append('c')


print(a)  [1, 2, 3, 4, ['a', 'b', 'c'], 5]
print(b)  [1, 2, 3, 4, ['a', 'b', 'c'], 5]
print(c)  [1, 2, 3, 4, ['a', 'b', 'c']]
print(d)  [1, 2, 3, 4, ['a', 'b', 'c']]
print(e)  [1, 2, 3, 4, ['a', 'b']]

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值