[Tools]3.Numpy的一些容易忘记的知识点

3.Numpy的一些容易忘记的知识点

一、Numpy的基本运算

  • numpy数组转换成标量scaler的list
import numpy as np

a = np.random.randn(3, 2)
print(a)
print(list(a))
print(list(map(list, a)))
[[ 0.5310127   1.8482319 ]
 [-1.54645326 -0.71086787]
 [ 0.39379521  1.17247948]]
[array([0.5310127, 1.8482319]), array([-1.54645326, -0.71086787]), array([0.39379521, 1.17247948])]
[[0.5310126955059437, 1.8482319005660728], [-1.5464532601176755, -0.7108678725740409], [0.39379520685685043, 1.1724794753885714]]
  • numpy常见用法
import torch
import numpy as np


# 向量的加减法
a = np.array([1, 2])            # array
b = np.array([3, 4])            # array
print(a + b)                    # +
print(a - b)                    # -
print(a * b)                    # 数乘
print(a / b)                    # /
print(a.dot(b))                 # 点乘,是一个标量
print(np.dot(a, b))             # 同上
print(a@b)                      # 向量的内积,一个标量


# 矩阵的计算
a = np.array([[1, 2], [3, 4]])
b = np.array([[5, 6], [7, 8]])
print(a + b)
print(a - b)
print(a * b)
print(a / b)
print(a.dot(b))                 # 是矩阵,则为矩阵乘法
print(np.dot(a, b))
print(a@b)
print(np.linalg.det(a))         # 求行列式的,这里精度有点问题
print(np.linalg.inv(a))         # 求矩阵的逆

二、常用的矩阵变换

import torch

# 矩阵形状变换
a = torch.arange(12).reshape(3, 4)       # 生成0-11的数据,并进行形状变换
b = torch.arange(12).view(3, 4)          # 同上
print(a)
# print(b)

c = a.T                                 # 矩阵的转置
d = a.t()                               # 同上
print(c)
print(d)

三、Numpy与其他包的转换

  1. 与Image的转换
a = np.random.randn(14,14,3)
img = Image.from_numpy(a)
img.show()
  1. 与Pytorch转换成tensor
import numpy as np
import torch


# numpy 与 torch之间的相互转换
a = np.array([1, 2])                            # array
b = torch.tensor(a, dtype=torch.float64)        # 从numpy转成torch
print(a)
print(b)
c = torch.from_numpy(a)                         # 从numpy转成torch
print(c)

d = c.numpy()                                   # 从torch转换成numpy
print(d)

四、Numpy的类型

import numpy as np
import torch

a = np.array([1., 2.], dtype=np.float32)        # 转成float32
a = a.astype(np.float64)                        # 转成float64

a = torch.tensor([1., 2.], dtype=torch.float32) # 转成float32
print(a.shape)

五、最小二乘法实现

github上看到的,很久了,忘记是哪个了

import math
import random
import torch
import matplotlib.pyplot as plt

def sigmoid(x):
    return 1 / (1 + math.exp(-x))

def mish(x):
    return x * math.tanh(math.log(1 + math.exp(x)))

if __name__ == '__main__':
    _x = [i / 100 for i in range(100)]
    _y = [4 * j + 3 for j in _x]
    print(_x)
    print(_y)

    w = random.random()
    b = random.random()
    plt.ion()
    for epoch in range(100000):
        for x, y in zip(_x, _y):
            y = sigmoid(y)
            z = sigmoid(w * x + b)

            loss = 1 / 2 * (z - y)**2

            # dw = 1.0*x*(1/(math.exp(-b - w*x) + 1) - 1/(1 + math.exp(-y)))*math.exp(-b - w*x)/(math.exp(-b - w*x) + 1)**2
            # db = 1.0*(1/(math.exp(-b - w*x) + 1) - 1/(1 + math.exp(-y)))*math.exp(-b - w*x)/(math.exp(-b - w*x) + 1)**2
            dw = (z-y)*z*(1-z)*x
            db = (z-y)*z*(1-z)
            w = w - 2.3 * dw
            b = b - 0.4 * db

            print("w:{}, b:{}, loss: {}".format(w, b, loss))
            plt.clf()
            plt.plot(_x, _y, 'r')
            v = [w * i + b for i in _x ]
            plt.plot(_x, v, "b")
            plt.pause(0.0001)
        plt.ioff()

六、总结

  1. numpy的使用时比较多的,这些都是一些容易忘记的,作为一个字典查询
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值