gpt4 book ai didi

python - 计算按前两列中的索引分组的numpy数组条目的第N列的总和?

转载 作者:行者123 更新时间:2023-12-04 08:55:08 25 4
gpt4 key购买 nike

我想以代码识别第一个和第二个元素是 check_matrix1 还是 11 等的方式循环跟随 2 ?然后对于每个单独的类,即 1,11,22,2 ,代码应存储在新矩阵中,最后一个元素的总和(在本例中具有索引 8)乘以 exp(-i*q(check_matrix[k][2:5]-check_matrix[k][5:8])) ,其中 i 是 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.]])
我将非常感谢您提出纠正它的建议。提前致谢!

最佳答案

我很确定你可以用更简单的方式解决这个问题,我不能 100% 确定我正确理解你,但这里有一些代码可以做我认为你想要的。如果您有可能检查结果是否有效,我建议您这样做。

import numpy as np

n = 20
q = np.zeros((20, 3))
q[:, -1] = np.linspace(0, 10, n)

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]])
check_matrix[:, :2] -= 1 # python indexing is zero based

matrices = np.zeros((n, 2, 2), dtype=np.complex_)

for i in range(2):
for j in range(2):
k_list = []
for k in range(len(check_matrix)):
if check_matrix[k][0] == i and check_matrix[k][1] == j:
k_list.append(check_matrix[k][8] *
np.exp(-1J * np.dot(q, check_matrix[k][2:5]
- check_matrix[k][5:8])))

matrices[:, i, j] = np.sum(k_list, axis=0)
注意:我将您的索引更改为一致
基于零的索引。

这是我用向量版本替换 k 循环的另一种方法:
for i in range(2):
for j in range(2):
k = np.logical_and(check_matrix[:, 0] == i, check_matrix[:, 1] == j)
temp = np.dot(check_matrix[k, 2:5] - check_matrix[k, 5:8], q[:, :, np.newaxis])[..., 0]
temp = check_matrix[k, 8:] * np.exp(-1J * temp)
matrices[:, i, j] = np.sum(temp, axis=0)

关于python - 计算按前两列中的索引分组的numpy数组条目的第N列的总和?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63871381/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com