鱼C论坛

 找回密码
 立即注册
查看: 6|回复: 3

[作品展示] (重发)好使!可视化线性向量运算

[复制链接]
发表于 前天 17:38 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
可视化线性向量运算
(重发是因为之前没明白代码怎么输进去。。。)

  1. import numpy as n
  2. import matplotlib.pyplot as m

  3. vec_a = n.array([1,1])
  4. vec_b = n.array([-1,1])

  5. vec_sum = vec_a + vec_b
  6. vec_dif = vec_a - vec_b
  7. vec_tim = vec_a * 0.5

  8. print(vec_a)
  9. print(vec_b)
  10. print(vec_sum)
  11. print(vec_dif)

  12. m.quiver(0,0,vec_a[0],vec_a[1],
  13.         angles = 'xy',scale_units = 'xy',
  14.         scale = 1,color = 'red',label = 'a')

  15. m.quiver(0,0,vec_b[0],vec_b[1],
  16.         angles = 'xy',scale_units = 'xy',
  17.         scale = 1,color = 'blue',label = 'b')

  18. m.quiver(0,0,vec_sum[0],vec_sum[1],
  19.         angles = 'xy',scale_units = 'xy',
  20.         scale = 1,color = 'lime',label = 'a+b')

  21. m.quiver(0,0,vec_dif[0],vec_dif[1],
  22.         angles = 'xy',scale_units = 'xy',
  23.         scale = 1,color = 'violet',label = 'a-b')

  24. m.quiver(0,0,vec_tim[0],vec_tim[1],
  25.         angles = 'xy',scale_units = 'xy',
  26.         scale = 1,color = 'yellow',label = '0.5a')

  27. m.title('Vector Samples')

  28. m.xticks(n.arange(-2, 3, 1))  

  29. m.yticks(n.arange(0, 4, 1))

  30. m.show()
复制代码


建议用jupyter或者vscode运行~
如果没装numpy和matplotlib模块的话会报错,记得先pip!
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 前天 17:39 | 显示全部楼层
不错!不过你的代码中有一个地方容易踩坑:n.array() 需要传参数,比如 n.array([1, 2]),否则会报错。

另外,m.quiver(0, 0, vec_a, vec_a, ...) 这种写法有问题。quiver 的语法是 quiver(X, Y, U, V),其中 U 和 V 分别是向量在 x 方向和 y 方向的分量,而不是整个向量。直接传 vec_a 会把整个数组当成分量,导致维度不匹配。

正确写法是拆开:


  1. m.quiver(0, 0, vec_a[0], vec_a[1], angles='xy', scale_units='xy', scale=1, color='red', label='a')
复制代码


其他向量同理。

修正后的完整代码:


  1. import numpy as np
  2. import matplotlib.pyplot as plt

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

  5. vec_sum = vec_a + vec_b
  6. vec_dif = vec_a - vec_b
  7. vec_tim = vec_a * 0.5

  8. print(vec_a)
  9. print(vec_b)
  10. print(vec_sum)
  11. print(vec_dif)

  12. plt.quiver(0, 0, vec_a[0], vec_a[1], angles='xy', scale_units='xy', scale=1, color='red', label='a')
  13. plt.quiver(0, 0, vec_b[0], vec_b[1], angles='xy', scale_units='xy', scale=1, color='blue', label='b')
  14. plt.quiver(0, 0, vec_sum[0], vec_sum[1], angles='xy', scale_units='xy', scale=1, color='lime', label='a+b')
  15. plt.quiver(0, 0, vec_dif[0], vec_dif[1], angles='xy', scale_units='xy', scale=1, color='violet', label='a-b')
  16. plt.quiver(0, 0, vec_tim[0], vec_tim[1], angles='xy', scale_units='xy', scale=1, color='yellow', label='0.5a')

  17. plt.title('Vector Samples')
  18. plt.xticks(np.arange(-2, 3, 1))
  19. plt.yticks(np.arange(0, 4, 1))
  20. plt.show()
复制代码


运行前记得先安装依赖:

pip install numpy matplotlib

另外,numpy 和 matplotlib 的常用别名是 np 和 plt,这样更简洁,不容易混淆。

希望对你有帮助,欢迎继续交流~

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 前天 17:43 | 显示全部楼层
AI是个好东西

  1. import numpy as np
  2. import matplotlib.pyplot as plt

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

  5. vec_sum = vec_a + vec_b
  6. vec_dif = vec_a - vec_b
  7. vec_tim = vec_a * 0.5

  8. print(vec_a)
  9. print(vec_b)
  10. print(vec_sum)
  11. print(vec_dif)

  12. plt.quiver(0, 0, vec_a[0], vec_a[1], angles='xy', scale_units='xy', scale=1, color='red', label='a')
  13. plt.quiver(0, 0, vec_b[0], vec_b[1], angles='xy', scale_units='xy', scale=1, color='blue', label='b')
  14. plt.quiver(0, 0, vec_sum[0], vec_sum[1], angles='xy', scale_units='xy', scale=1, color='lime', label='a+b')
  15. plt.quiver(0, 0, vec_dif[0], vec_dif[1], angles='xy', scale_units='xy', scale=1, color='violet', label='a-b')
  16. plt.quiver(0, 0, vec_tim[0], vec_tim[1], angles='xy', scale_units='xy', scale=1, color='yellow', label='0.5a')

  17. plt.title('Vector Samples')
  18. plt.xticks(np.arange(-2, 3, 1))
  19. plt.yticks(np.arange(0, 4, 1))
  20. plt.show()
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 前天 17:43 | 显示全部楼层
VIRUS_2091 发表于 2026-08-18 17:43
AI是个好东西

import numpy as np
impor ...


你的代码还是有两个关键错误哦!

1. n.array() 少了具体数值  
n.array() 必须传入向量内容,比如:n.array([1, 2]),否则会报错。你需要自己定义两个向量,比如:  
  1. vec_a = np.array([1, 2])  
  2. vec_b = np.array([2, 1])
复制代码


2. quiver 的参数理解有误  
quiver 的画法需要的是起点坐标和向量的 x、y 分量,不是直接塞整个向量。正确写法是把向量拆成分量:  
  1. plt.quiver(0, 0, vec_a[0], vec_a[1], angles='xy', scale_units='xy', scale=1, ...)
复制代码

你的写法虽然能画,但会画出两个箭头(因为vec_a有两个元素),并不是你想要的。

修正后的完整代码:  
  1. import numpy as np
  2. import matplotlib.pyplot as plt

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

  5. vec_sum = vec_a + vec_b
  6. vec_dif = vec_a - vec_b
  7. vec_tim = vec_a * 0.5

  8. print(vec_a)
  9. print(vec_b)
  10. print(vec_sum)
  11. print(vec_dif)

  12. plt.quiver(0, 0, vec_a[0], vec_a[1], angles='xy', scale_units='xy', scale=1, color='red', label='a')
  13. plt.quiver(0, 0, vec_b[0], vec_b[1], angles='xy', scale_units='xy', scale=1, color='blue', label='b')
  14. plt.quiver(0, 0, vec_sum[0], vec_sum[1], angles='xy', scale_units='xy', scale=1, color='lime', label='a+b')
  15. plt.quiver(0, 0, vec_dif[0], vec_dif[1], angles='xy', scale_units='xy', scale=1, color='violet', label='a-b')
  16. plt.quiver(0, 0, vec_tim[0], vec_tim[1], angles='xy', scale_units='xy', scale=1, color='yellow', label='0.5a')

  17. plt.title('Vector Samples')
  18. plt.xticks(np.arange(-2, 3, 1))
  19. plt.yticks(np.arange(0, 4, 1))
  20. plt.show()
复制代码


运行前先确认安装了依赖:pip install numpy matplotlib  
尽量用 Jupyter 或 VSCode 运行,能方便查看图形。祝你成功!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-8-20 23:24

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表