常用科研Numpy方法总结

一、Numpy属性

array = np.array([[1,2,3],[4,5,6]],dtype=float)   #讲列表转换为矩阵
print("array是几维数组:",array.ndim) W
print("array的形状:",array.shape)
print("array的元素个数:",array.size)
print("array的元素属性:",array.dtype)

Result:
array是几维数组: 2
array的形状: (2, 3)
array的元素个数: 6
array的元素属性: float64

二、Numpy创建数组array

#array的形式
a = np.array([2,4,5],dtype=np.float64)
print("array的数据类型:",a.dtype)
Result:
array的数据类型: float64

#定义值为0的矩阵
b = np.zeros((3,4))   #注意这里声明3行4列要有一个括号
print(b)
Result:
[[0. 0. 0. 0.]
 [0. 0. 0. 0.]
 [0. 0. 0. 0.]]

#定义值为1的矩阵
c = np.ones((3,4))
print(c)
Result:
[[1. 1. 1. 1.]
 [1. 1. 1. 1.]
 [1. 1. 1. 1.]]


#定义一个什么都没有的矩阵
d = np.empty((3,4))
print(d)
Result:
[[1. 1. 1. 1.]
 [1. 1. 1. 1.]
 [1. 1. 1. 1.]]


#生成一个有序的序列
e = np.arange(10,20,2) #第一个参数是初始值,第二个参数是终点值,第三个参数是步长
e1 = np.arange(20,10,-1) # -1 表示反向生成
print("正向生成:",e)
print("反向生成",e1)
Result:
正向生成: [10 12 14 16 18]
反向生成 [20 19 18 17 16 15 14 13 12 11]


#根据已经有的序列定义一个矩阵
f = np.arange(12).reshape((3,4))
print(f)
Result:
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]


#根据给出的数据生成一个线段
g = np.linspace(1,10,5)  #第一个参数是初始值,第二个参数是终点值,第三个参数是段数
print(g)
Result:
[ 1.    3.25  5.5   7.75 10.  ]

三、Numpy的基础运算

a = np.array([1,2,3,4])
b = np.arange(4)
c = a - b
print("a的值:",a,"b的值:",b)
print("c的值:",c)
print("b的平方",b**2,"b的四次方",b**4)
Result:
a的值: [1 2 3 4] b的值: [0 1 2 3]
c的值: [1 1 1 1]
b的平方 [0 1 4 9] b的四次方 [ 0  1 16 81]


# 对于数字的sin三角运算
e =np.sin(a)
print("a的sin值为",e)
Result:
a的sin值为 [ 0.84147098  0.90929743  0.14112001 -0.7568025 ]

# numpy有两种矩阵乘法,一种是逐个相乘,一种是矩阵相乘
a = np.array([[1,1],[1,2]])
b = np.arange(4).reshape((2,2))
c = a * b
print("a矩阵:",a,"b矩阵",b)
print("a * b",c)
c = np.dot(a,b)    #a.dot(b) 也可以
print("矩阵相乘",c)
Result:
a矩阵: 
[[1 1]
 [1 2]] 
b矩阵 
[[0 1]
 [2 3]]
a * b 
[[0 1]
 [2 6]]
矩阵相乘 
[[2 4]
 [4 7]]


#求矩阵和、最小值、最大值
a = np.random.random((2,4))   # 第一个random是模块,第二个random是函数
print("随机生成的a:",a)
print(np.sum(a))
print(np.min(a,axis=0))  # axis = 0 是在lie数中求和,axis = 1是在行数中求和
print(np.max(a))
Result:
随机生成的a: [[0.73575864 0.18256228 0.36581254 0.81135318] [0.12868261 0.20950966 0.32211043 0.02975593]]
2.785545270769166
[0.12868261 0.18256228 0.32211043 0.02975593]
0.811353176231199

A = np.arange(12).reshape((3,4))
print(A)
#索引最小,最大
print("最小最大索引分别为:",np.argmin(A),np.argmax(A))
Result:
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]
最小最大索引分别为: 0  11
    
    
#计算整个矩阵的平均值
print(np.mean(A)) #用A.mean()也是可以的
#计算加权平均数
print(np.average(A))
#计算中位数
print(np.median(A))
Result:
5.5
5.5
5.5


#逐步想加,斐波那契数列
print(np.cumsum(A))
Result:
[ 0  1  3  6 10 15 21 28 36 45 55 66]


#每两个数之间的差
print(np.diff(A))
Result:
[[1 1 1]
 [1 1 1]
 [1 1 1]]


#输出矩阵中的非0数位置
print(np.nonzero(A))
Result:
(array([0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2], dtype=int64), array([1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3], dtype=int64))


#对矩阵的元素进行排序
print(np.sort(A))
Result:
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]


#A的转置矩阵
print(A.T)
Result:
[[ 0  4  8]
 [ 1  5  9]
 [ 2  6 10]
 [ 3  7 11]]


# 控制范围函数
print(np.clip(A,5,9))  #第一个参数是矩阵,第二个参数是最小数,第三个参数是最大数。  意思是,如果有小于5的数,全部设为5,如果有大于9的数,全部设为9
Result:
[[5 5 5 5]
 [5 5 6 7]
 [8 9 9 9]]

四、Numpy的索引

A = np.arange(3,15).reshape((3,4))
print(A)
print(A[1][1]) # 也可以写成A[1,1]
print(A[1,1:2])
Result:
[[ 3  4  5  6]
 [ 7  8  9 10]
 [11 12 13 14]]
8
[8]


#A的逐项迭代
for item in A.flat:
    print(item)
Result:
3
4
5
6
7
8
9
10
11
12
13
14

#A的行迭代
for row in A:
    print(row)
Result:
[3 4 5 6]
[ 7  8  9 10]
[11 12 13 14]


#A的列迭代
for colum in A.T:
    print(colum)
Result:
[ 3  7 11]
[ 4  8 12]
[ 5  9 13]
[ 6 10 14]

五、Numpy的合并

A = np.array([1,1,1])[:,np.newaxis]  #np.newaxis 就是插入新维度的意思,比如将一维数组变成二维数组,二维变成三维等
B = np.array([2,2,2])[:,np.newaxis]
#上下合并
print(np.vstack((A,B)))
Result:
[[1]
 [1]
 [1]
 [2]
 [2]
 [2]]


#左右合并
print(np.hstack((A,B)))
Result:
[[1 2]
 [1 2]
 [1 2]]

#合并
C = np.concatenate((A,B,B,A),axis=1) 
print(C)
Result:
[[1 2 2 1]
 [1 2 2 1]
 [1 2 2 1]]

六、Numpy的分割

A = np.arange(12).reshape((3,4))
print(A)
print(np.split(A,3,axis=0))
# print(np.split(A,3,axis=1)) #会报错,因为有四列,所以没法均分为3列
Result:
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]
[array([[0, 1, 2, 3]]), array([[4, 5, 6, 7]]), array([[ 8,  9, 10, 11]])]

#特殊割
print(np.array_split(A,3,axis=1))
Result:
[array([[0, 1],
       [4, 5],
       [8, 9]]), 
 array([[ 2],
        [ 6],
        [10]]), 
 array([[ 3],
       [ 7],
       [11]])]

#快捷方式切
print(np.vsplit(A,3)) #纵向分成三块的分割
print(np.hsplit(A,4)) #横向分为4快的分割
Result:
[array([[0, 1, 2, 3]]), array([[4, 5, 6, 7]]), array([[ 8,  9, 10, 11]])]
[array([[0],
       [4],
       [8]]), 
 array([[1],
       [5],
       [9]]), 
 array([[ 2],
       [ 6],
       [10]]), 
 array([[ 3],
       [ 7],
       [11]])]

七、Numpy的copy和deep copy

a = np.arange(4)
b = a
print(b is a)
b[0]=2
print(b is a)   # why ?  修改B,A也跟着变了,说明指针指向了同一个地址,那应该怎么杜绝这种现象?
# 深度copy
b = a.copy()
b[1] = 12
print(b is a)  # Fasle ,这样改变B,A就不会变了
Result:
True
True
False

八、怎么将Numpy转换成Tensor,Tensor怎么转换Numpy?

Numpy----->Tensor:

方式一:

x = np.ones(5)  # 声明一个Numpy数组  <class 'numpy.ndarray'>
x = torch.tensor(x)   # 将x转换成Tensor  <class 'torch.Tensor'>

方式二:

x = torch.from_numpy(x)

Tensor------->Numpy

方式一:

x = torch.ones(5) # 创建张量x   # tensor([1., 1., 1., 1., 1.])
x_ = x.detach().numpy() # 转换  # array([1., 1., 1., 1., 1.], dtype=float32)

方式二:

x_= x.numpy()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

于弋gg

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值