【发布时间】:2019-05-27 13:47:22
【问题描述】:
所以我使用两个变量 u(向量,x - y)和标量 k 创建了这个 3x3 G 矩阵(此处未显示,它与我的问题无关)。 x_j = (x_1 (j), x_2 (j), x_3 (j)) 和 y_j = (y_1 (j), y_2 (j), y_3 (j))。 alpha_j 是一个 3x3 矩阵。 A 矩阵是大小为 3nx3n 的块对角矩阵。我在使用 W 矩阵时遇到问题。如何编写大小为 3nx3n 的矩阵,其中第 (i,j) 个块是由 alpha_i*G_[ij]*alpha_j 给出的 3x3 矩阵?我迷路了。
我的 alpha_j 矩阵似乎也有问题。循环不断向我抛出错误,“只有长度为 1 的数组可以转换为 Python 标量。”请帮助:/
def W(x, y, k, alpha, A):
u = x - y
n = x.shape[0]
W = np.zeros((3*n, 3*n))
for i in range(0, n-1):
for j in range(0, n-1):
#u = -np.array([[x[i,0] - x[j,0]], [x[i,1] - x[j,1]], [0]]) ??
W[i][j] = (alpha_j(alpha, A) * G(u, k) * alpha_j(alpha, A))
W[i][i] = np.zeros((n, n))
return W
def alpha_j(a, A):
alph = np.array([[0,0,0],[0,0,0],[0,0,0]],complex)
rho = np.random.rand(3,1)
for i in range(0, 2):
for j in range(0, 2):
alph[i][j] = (rho[i] * a * A[i][j])
return alph
#-------------------------------------------------------------------
x1 = np.array([[1], [2], [0]])
y1 = np.array([[4], [5], [0]])
# SYSTEM PARAMETERS
# incoming Wave angle
theta = 0 # can range from [0, 2pi)
# susceptibility
chi = 10 + 1j
# wavelength
lam = 0.5 # microns (values between .4-.7)
# frequency
k = (2 * np.pi)/lam # 1/microns
# volume
V_0 = (0.05)**3 # microns^3
# incoming wave vector
K = k * np.array([[0], [np.sin(theta)], [np.cos(theta)]])
# polarization vector
vecinc = np.array([[1], [0], [0]]) # (can choose any vector perpendicular to K)
# for the fixed alpha case
alpha = (V_0 * 3 * chi)/(chi + 3)
# 3 x 3 matrix
A = np.matlib.identity(3) # could be any symmetric matrix,
#-------------------------------------------------------------------
# TEST FUNCTIONS
test = G((x1-y1), k)
print(test)
w = W(x1, y1, k, alpha, A)
print(w)
有时我的 W 循环会向我抛出错误,“无法设置具有序列的数组元素”。但是我需要将这个任意矩阵 W 中的每个数组元素设置为通过将 alpha 乘以 G 创建的 3x3 矩阵...
【问题讨论】:
-
嗨@Becs!首先,您能否创建一个重现您的问题的 minimal 示例? (这甚至可以帮助您回答您自己的问题。)其次,如果您可以用反引号
so it looks like this包围内联代码,这将有助于提高可读性。第三,包括一些最小的样本输入数据和所需的输出可能对您和潜在的响应者都有帮助。第四,也是最后,到目前为止,您尝试了哪些方法来消除这些错误? -
嘿!有人最终为我指明了正确的方向,但我会记住你的提示,谢谢:)
-
G'matrix' 与问题相关。没有它我们无法运行您的代码,因此无法重现您的错误。但是你使用G就好像它是一个函数,而不是一个矩阵。 -
您的错误是将
A设为np.matrix并使用[i][j]样式而不是[i,j]进行索引的结果。更正这些,我们得到另一个错误 -setting element with sequence。那是因为W被初始化为 2d,而应该是 4d。 -
为什么使用:
range(0, n-1)。您不想遍历n值吗?