【发布时间】:2020-09-13 13:30:46
【问题描述】:
我想循环跟踪check_matrix,以便代码识别第一个和第二个元素是1 和1 还是1 和2 等?然后对于每个单独的对类,即1,1 或1,2 或2,2,代码应存储在新矩阵中,最后一个元素(在本例中具有索引8)乘以exp(-i*q(check_matrix[k][2:5]-check_matrix[k][5:8])) 的总和,其中@ 987654330@ 是 iota(复数),k 是 check_matrix 上的运行索引,q 是如下定义的向量。所以有 20 个q 向量。
import numpy as np
q= []
for i in np.linspace(0, 10, 20):
q.append(np.array((0, 0, i)))
q = np.array(q)
check_matrix = np.array([[1, 1, 0, 0, 0, 0, 0, -0.7977, -0.243293],
[1, 1, 0, 0, 0, 0, 0, 1.5954, 0.004567],
[1, 2, 0, 0, 0, -1, 0, 0, 1.126557],
[2, 1, 0, 0, 0, 0.5, 0.86603, 1.5954, 0.038934],
[2, 1, 0, 0, 0, 2, 0, -0.7977, -0.015192],
[2, 2, 0, 0, 0, -0.5, 0.86603, 1.5954, 0.21394]])
这意味着原则上我必须有 20 个形状为 2x2 的矩阵,对应于每个 q 向量。
目前我的代码只给出了一个矩阵,它似乎是最后一个矩阵,即使我在Matrices 中附加。我的代码如下所示,
for i in range(2):
i = i+1
for j in range(2):
j= j +1
j_list = []
Matrices = []
for k in range(len(check_matrix)):
if check_matrix[k][0] == i and check_matrix[k][1] == j:
j_list.append(check_matrix[k][8]*np.exp(-1J*np.dot(q,(np.subtract(check_matrix[k][2:5],check_matrix[k][5:8])))))
j_11 = np.sum(j_list)
I_matrix[i-1][j-1] = j_11
Matrices.append(I_matrix)
I_matrix 定义如下:
I_matrix= np.zeros((2,2),dtype=np.complex_)
目前我得到以下输出。
Matrices = [array([[-0.66071446-0.77603624j, -0.29038112+2.34855023j], [-0.31387562-0.08116629j, 4.2788 +0.j ]])]
但是,我希望得到一个对应于每个 q 值的矩阵,这意味着在这种情况下总共应该有 20 个矩阵,其中每个 2x2 矩阵元素将包含总和,使得元素属于 1,1 和 1 ,2 和 2,2 以下列方式对
array([[11., 12.],
[21., 22.]])
非常感谢您提出的更正建议。提前致谢!
【问题讨论】:
-
如何得到第一个元素为 (1, 1) (1, 2) 等的矩阵?也许如果您使用更智能的索引/重塑,您就不必以如此复杂的方式检索信息!并且缺少
q_1、df_matrix和I_matrix,请提供所有信息以运行您的代码。 -
感谢您的友好回复。我做了一些小的改动,这些是只有
q,而不是q_1。没有df_matrix。I_matrix现在已经定义好了。 -
我还是想知道
check_matrix是怎么得到的,这里算什么,我觉得没必要这么复杂。 -
嗯,校验矩阵是数据的一小部分,我从另一个代码中获得的。我打算对我的数据执行傅里叶变换。
-
你试过我推荐的 3-liner 了吗?
标签: python numpy loops matrix nested