手撕乘积(**Multiplication** & **Product**): 穷举和图示(2) 点积的几何意义

这篇具有很好参考价值的文章主要介绍了手撕乘积(**Multiplication** & **Product**): 穷举和图示(2) 点积的几何意义。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

手撕乘积(Multiplication & Product): 穷举和图示(2) 点积的几何意义

点乘

x = 3
y = 5
xNda = np.arange(x)
>>> array([0, 1, 2])
x2Nda = xNda*2+1
>>> array([1, 3, 5])
yNda = np.arange(1, y)
>>> array([1, 2, 3, 4])
xyNda = np.meshgrid(xNda, yNda)
>>> array([[[0, 1, 2],
            [0, 1, 2],
            [0, 1, 2],
            [0, 1, 2]],
           [[0, 0, 0],
            [1, 1, 1],
            [2, 2, 2],
            [3, 3, 3]]])

np.dot(x, y)
>>> 15
np.dot(xNda, x)
>>> array([0, 3, 6])
np.dot(xNda+3, xNda+7) # 👇图示之
>>> 98

手撕乘积(**Multiplication** & **Product**): 穷举和图示(2) 点积的几何意义,与珎同行录,Python,逆向工程和3D重建应用于医学影像,numpy,python,机器学习

手撕乘积(**Multiplication** & **Product**): 穷举和图示(2) 点积的几何意义,与珎同行录,Python,逆向工程和3D重建应用于医学影像,numpy,python,机器学习

向量的点乘,也叫做向量的内积、数量积。对两个向量执行点乘运算,就是对着两个向量对应位置一一相乘之后求和的操作,点乘的结果是一个标量。

定义: 向量 a = [ a 1 , a 2 , . . . , a n ] a = [a_1, a_2, ..., a_n] a=[a1,a2,...,an] 和向量 b = [ b 1 , b 2 , . . . , b n ] b = [b_1, b_2, ..., b_n] b=[b1,b2,...,bn] 的内积为:

a ⋅ b = ∑ i = 1 n a i b i = a 1 b 1 + a 2 b 2 + . . . + a n b n a \cdot b = \sum_{i=1}^n a_i b_i = a_1 b_1 + a_2 b_2 + ... + a_n b_n ab=i=1naibi=a1b1+a2b2+...+anbn

特别地, 0 ⋅ a = a ⋅ 0 = 0 0 \cdot a = a \cdot 0 = 0 0a=a0=0;若 a , b a, b a,b 是非零向量,则 a a a b b b 正交的充要条件是 a ⋅ b = 0 a \cdot b = 0 ab=0

点积的几何意义: 可以用来表征或计算两个向量之间的夹角,以及在 b b b 向量在 a a a 向量方向上的投影,有公式:

a ⋅ b = ∣ a ∣ ∣ b ∣ cos ⁡ θ a \cdot b = |a| |b| \cos \theta ab=a∣∣bcosθ

其中, θ \theta θ a a a b b b 之间的夹角。

手撕乘积(**Multiplication** & **Product**): 穷举和图示(2) 点积的几何意义,与珎同行录,Python,逆向工程和3D重建应用于医学影像,numpy,python,机器学习

根据这个公式就可以计算向量 a a a 和向量 b b b 之间的夹角。从而就可以进一步判断这两个向量是否是同一方向,是否正交(也就是垂直)等方向关系,具体对应关系为:

  • a ⋅ b > 0 a \cdot b > 0 ab>0,方向基本相同,夹角在 0 ° 0° 90 ° 90° 90° 之间;
  • a ⋅ b = 0 a \cdot b = 0 ab=0,正交,相互垂直;
  • a ⋅ b < 0 a \cdot b < 0 ab<0,方向基本相反,夹角在 90 ° 90° 90° 180 ° 180° 180° 之间。

向量点乘的运算特性:

  • a 2 ≥ 0 a^2 \geq 0 a20;当 a 2 = 0 a^2 = 0 a2=0 时,必有 a = 0 a = 0 a=0; (正定性)
  • a ⋅ b = b ⋅ a a \cdot b = b \cdot a ab=ba;(对称性)
  • ( λ a + μ b ) ⋅ c = λ a ⋅ c + μ b ⋅ c (\lambda a + \mu b) \cdot c = \lambda a \cdot c + \mu b \cdot c (λa+μb)c=λac+μbc,对任意实数 λ , μ \lambda, \mu λ,μ 成立; (线性)
  • cos ⁡ ∠ ( a , b ) = a ⋅ b / ( ∣ a ∣ ∣ b ∣ ) \cos \angle (a, b) = a \cdot b / (|a| |b|) cos(a,b)=ab/(a∣∣b);(余弦定理)
  • ∣ a ⋅ b ∣ ≤ ∣ a ∣ ∣ b ∣ |a \cdot b| \leq |a| |b| aba∣∣b,等号只在 a a a b b b 共线时成立。

代码解释点积的几何意义:

问题:

向量 a = [ 1 , 0 ] a = [1, 0] a=[1,0] b = [ 1 , 2 ] b = [1, 2] b=[1,2]两个向量之间的夹角是多少?
用图解释一下:

import matplotlib.pyplot as plt
ndA = np.asanyarray
a = ndA((1,1))
b = ndA((3,2))
o = ndA((0,0))
abAngle = np.degrees(np.arccos(np.dot(a,b)/(np.linalg.norm(a)*np.linalg.norm(b))))
print(f'abAngle={abAngle}°')
plt.axis('equal')
plt.grid()
plt.plot(*zip(o,a), 'r')
plt.plot(*zip(o,b), 'b')
plt.show()
np.dot(xNda, xNda)
>>> 5
  • 💡: 自己点乘自己相当于求向量的模的平方 a ⋅ a = ∣ a ∣ 2 a \cdot a = |a|^2 aa=a2
# 向量的模长(即到原点的距离)
np.linalg.norm(xNda)
xDst = np.dot(xNda, xNda)**.5

判断向量 a ⃗ \vec{a} a b ⃗ \vec{b} b 是否正交, 是否同向…

def v1v2(a, b):
  dotAb = np.dot(a, b)
  if dotAb == 0:
    print('垂直')
  elif dotAb > 0:
    print('同向')
  elif dotAb < 0:
    print('反向')
  if abs(dotAb) == 1:
    print('平行')

标量投影

a b = ∣ a ∣ cos ⁡ θ a_b = |a| \cos \theta ab=acosθ

手撕乘积(**Multiplication** & **Product**): 穷举和图示(2) 点积的几何意义,与珎同行录,Python,逆向工程和3D重建应用于医学影像,numpy,python,机器学习

a b = ∣ a ∣ cos ⁡ θ = a ⋅ b ∣ b ∣ = a ⋅ b ^ a_b = |a| \cos \theta = \frac{a \cdot b}{|b|} = a \cdot \hat{b} ab=acosθ=bab=ab^

# aPjb = lambda a, b: np.dot(a, b)/np.linalg.norm(b) * b/np.linalg.norm(b) # 向量a在向量b上的投影的标量(长度); 乘以向量b的单位向量, 得到向量a在向量b上的投影向量

aPjb = lambda a, b: b * np.dot(a, b)/np.dot(b, b) # 获取向量a在向量b上的投影点()

# 进一步简化, 已知b的单位向量
aPjbN = lambda a, bN: bN * np.dot(a, bN) # 获取向量a在向量b上的投影点()

  • 注意⚠️: 👆🏻 a ⃗ \vec{a} a b ⃗ \vec{b} b 的关系建立在笛卡尔坐标系, 原点o是起点.

引入第3点 c ⃗ \vec{c} c 作为起点, 点>>线>>面, 让我们从起点o进入欧氏几何…

a + b
>>> array([4, 5])
c = ndA((1,3))
b - a
>>> array([2, 1])
a - b
>>> array([-2, -1])

手撕乘积(**Multiplication** & **Product**): 穷举和图示(2) 点积的几何意义,与珎同行录,Python,逆向工程和3D重建应用于医学影像,numpy,python,机器学习

手撕乘积(**Multiplication** & **Product**): 穷举和图示(2) 点积的几何意义,与珎同行录,Python,逆向工程和3D重建应用于医学影像,numpy,python,机器学习



```python

np.linalg.norm(a-b) # 欧氏距离
>>> 2.23606797749979

∠ a b c \angle{abc} abc = ?

abLen = lambda: a_b: np.linalg.norm(a_b)
acbAngle = np.degrees(np.arccos(np.dot(a-c, b-c)/(np.linalg.norm(a-c)*np.linalg.norm(b-c))))
print(f'acbAngle={acbAngle}°')

a到bc的距离:

a2bcLen = abLen(a - aPjb(c-a, b-c))

升级继续, 让这些图形动起来:
点在空间中, 只有移动, 👇:

import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
o = ndA((0,0,0))
a = ndA((1,1,1))
b = ndA((3,2,1))
o + ndA((1, 0, 0)) # 表示o点在x轴上移动1个单位, y轴和z轴不变; 以此类推
def axMat(p, xyz='x', stp=1):
  if xyz == 'x':
    p1 = p + ndA((stp, 0, 0))
  elif xyz == 'y':
    p1 = p + ndA((0, stp, 0))
  elif xyz == 'z':
    p1 = p + ndA((0, 0, stp))
  return p1
# 同理, plnMat, 三维空间中的平面移动;
def plnMat(p, xyz='xy', stp=ndA((1,1))):
  if xyz == 'xy':
    p1 = p + ndA((stp[0], stp[1], 0))
  elif xyz == 'yz':
    p1 = p + ndA((0, stp[0], stp[1]))
  elif xyz == 'xz':
    p1 = p + ndA((stp[0], 0, stp[1]))
  return p1
# 如果都不为0, 就摆脱了轴和面的限制, 可以在空间中任意移动,,, 但是, 你得知道你要移动到哪里去...好无聊...我们先从二维的几何体开始
# 先建一个三角形abc
abcNda = ndA([[1,1], [3,2], [1,3]])
# tfMat  = ndA([[r0c0, r0c1], [r1c0, r1c1]])
tfMat = lambda r0c0, r0c1, r1c0, r1c1: ndA([[r0c0, r0c1], [r1c0, r1c1]])

所谓的变换矩阵(Transformation matrix), '就是一个二维数组, 用来描述一个几何体的变换, 例如: 旋转, 缩放, 平移等等…, ’ (👈🏻小c手撕乘积(**Multiplication** & **Product**): 穷举和图示(2) 点积的几何意义,与珎同行录,Python,逆向工程和3D重建应用于医学影像,numpy,python,机器学习插话)是一个(n,n)的数组, 好吧…其实呢, 我们只需要知道:2x2, 3x3和4x4这三种矩阵来完成欧几里得变换, 先从二维开始…

未完待续…
以上内容来自维基百科, 由手撕乘积(**Multiplication** & **Product**): 穷举和图示(2) 点积的几何意义,与珎同行录,Python,逆向工程和3D重建应用于医学影像,numpy,python,机器学习协助完成.文章来源地址https://www.toymoban.com/news/detail-791572.html

到了这里,关于手撕乘积(**Multiplication** & **Product**): 穷举和图示(2) 点积的几何意义的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【琐碎】element-wise multiplication

    element-wise product = element-wise multiplication = Hadamard product 含义: 两个矩阵对应位置元素进行乘积 例如v*w=s表示对每一个输入向量 v 乘以一个给定的“权重” w 向量。换句话说,就是通过一个乘子对数据集的每一列进行缩放。这个转换可以表示为如下的形式: 参考: https://www.zh

    2024年02月11日
    浏览(36)
  • 叉乘、向量积的计算以及推导

    几何图示: 设有 a = ( a x , a y , a z ) , b = ( b x , b y , b z ) mathbf{a}=left(a_{x}, a_{y}, a_{z}right), mathbf{b}=left(b_{x}, b_{y}, b_{z}right) a = ( a x ​ , a y ​ , a z ​ ) , b = ( b x ​ , b y ​ , b z ​ ) i , j , k 分别是 X , Y , Z 轴方向的单位向量,则: a × b = ( a y b z − a z b y ) i + ( a z b x − a

    2024年02月16日
    浏览(30)
  • 有限域的Fast Multiplication和Modular Reduction算法实现

    关于有限域的基础知识,可参考: RISC Zero团队2022年11月视频 Intro to Finite Fields: RISC Zero Study Club 有限域几乎是密码学中所有数学的基础。 ZKP证明系统中的所有运算都是基于有限域的: 使用布尔运算的数字电路:如AND、OR、NOT。 使用有限域运算的算术电路:如addition、multiplic

    2024年02月05日
    浏览(46)
  • 矩阵乘法的几种观点,内积外积的理解

    矩阵乘法核心思想(5):内积与外积 u u u 和 v v v 分别是 m × 1 m times 1 m × 1 的向量, u T v u^Tv u T v 是内积( 1 × 1 1 times1 1 × 1 也就是内积得到一个数)(如果看到 u v uv u v 也是内积的意思), u v T uv^T u v T 是外积( m × m m times m m × m ); 秩1矩阵是构建任何矩阵完美的基础砖块

    2024年02月08日
    浏览(27)
  • 穷举&&深搜&&暴搜&&回溯&&剪枝(2)

    一)电话号码的字母组合 17. 电话号码的字母组合 - 力扣(LeetCode) 1)画出决策树:只是需要对最终的决策树做一个深度优先遍历,在叶子节点收集结果即可 把图画出来,知道每一层在干什么,代码就能写出来了  2)定义全局变量: 1)定义一个哈希表来处理数字和字符串的映射关系

    2024年02月14日
    浏览(33)
  • 穷举&&深搜&&暴搜&&回溯&&剪枝(3)

    一)字母大小写全排列 784. 字母大小写全排列 - 力扣(LeetCode) 1)从每一个字符开始进行枚举,如果枚举的是一个数字字符,直接忽视 如果是字母的话,进行选择是变还是不变 2)当进行遍历到叶子结点的时候,直接将结果存放到ret里面即可 3)相对于是对于这个决策树做一个深度

    2024年02月14日
    浏览(37)
  • 穷举&&深搜&&暴搜&&回溯&&剪枝(4)

    一)单词搜索: 直接在矩阵中依次找到特定字符串 79. 单词搜索 - 力扣(LeetCode) 画出决策树,只需要做一个深度优先遍历: 1)设计dfs函数:只需要关心每一层在做什么即可,从这个节点开始,开始去尝试匹配字符串的下一个字符,就是从某一个位置的字符开始,上下左右下标看看

    2024年02月09日
    浏览(33)
  • 蓝桥杯练习题-穷举模拟

    本文主要是【穷举模拟】——蓝桥杯练习题-穷举模拟的文章,如果有什么需要改进的地方还请大佬指出⛺️ 🎬作者简介:大家好,我是听风与他🥇 ☁️博客首页:CSDN主页听风与他 🌄每日一句:狠狠沉淀,顶峰相见 题目描述:已知A、B、C、D中有一个凶手,对他们审讯,已

    2024年01月17日
    浏览(36)
  • 【算法】最直接的算法——穷举法详解

    穷举法又称为枚举法或者蛮力法,是一种简单直接解决问题的方法,常常是基于问题的直接描述去编写程序,比如说求n的阶乘,那么就直接一个循环n次的for循环。 穷举法依赖的基本技术是遍历,也就是采用一定策略依次处理待求解问题的所有元素。对于穷举法自身的优化,

    2024年02月08日
    浏览(24)
  • 向量(基础,点积,叉积等)

    1.1、向量的基本概念 向量又称为矢量(vector),表示既有大小又有方向的量。在物理学中,力,速度,位移等都可以用向量来表示。  向量通常用一个有向线段表示。 1.2、向量的加减法 向量的加法运算符合平行四边形法则。 设向量 a (x1,y1) b (x2,y2),则 a+b  =(x1+x

    2023年04月08日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包