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']]