【发布时间】:2017-07-15 17:16:38
【问题描述】:
我很难进入 numpy。我最终想要的是一个简单的由矩阵转换的向量的颤动图。我已经读过很多次了,只是将数组用于矩阵,这很公平。我有一个用于 x 和 y 坐标的网格
X,Y = np.meshgrid( np.arange(0,10,2),np.arange(0,10,1) )
a = np.array([[1,0],[0,1.1]])
但即使在谷歌搜索并尝试了两个多小时后,我也无法从 a 的矩阵乘法和每个向量中得到结果向量。我知道 quiver 将分量长度作为输入,因此进入 quiver 函数的结果向量应该类似于 x 分量的 np.dot(a, [X[i,j], Y[i,j]]) - X[i,j],其中 i 和 j 迭代范围。
我当然可以循环编程,但是 numpy 有太多内置工具可以方便地使用这些矢量化的东西,我相信有更好的方法。
编辑:好的,这是循环版本。
import numpy as np
import matplotlib.pyplot as plt
plt.figure(figsize=(10,10))
n=10
X,Y = np.meshgrid( np.arange(-5,5),np.arange(-5,5) )
print("val test", X[5,3])
a = np.array([[0.5,0],[0,1.3]])
U = np.zeros((n,n))
V = np.zeros((n,n))
for i in range(10):
for j in range(10):
product = np.dot(a, [X[i,j], Y[i,j]]) #matrix with vector
U[i,j] = product[0]-X[i,j] # have to substract the position since quiver accepts magnitudes
V[i,j] = product[1]-Y[i,j]
Q = plt.quiver( X,Y, U, V)
【问题讨论】:
-
您希望结果是什么样的?
a.shape = (2,2), X.shape = (10,5), Y.shape = (10,5)。我不明白你的意思...... -
你能在循环中显示一个简单的版本吗(以便更容易弄清楚你想要做什么)?
-
完成。它实际上只是一个向量场上的矩阵,结果通过颤动箭头可视化
-
我发布了一个关于做这种点积的答案here,可能对你有帮助。