gpt4 book ai didi

python - 在 numpy 中,计算一个矩阵,其中每个单元格包含该行中所有其他条目的乘积

转载 作者:太空狗 更新时间:2023-10-29 18:03:04 25 4
gpt4 key购买 nike

我有一个矩阵

A = np.array([[0.2, 0.4, 0.6],
[0.5, 0.5, 0.5],
[0.6, 0.4, 0.2]])

我想要一个新矩阵,其中第 i 行和第 j 列中的条目的值是 A 的第 i 行所有条目的乘积,除了第 j 列中该行的单元格。

array([[ 0.24,  0.12,  0.08],
[ 0.25, 0.25, 0.25],
[ 0.08, 0.12, 0.24]])

我首先想到的解决方案是

np.repeat(np.prod(A, 1, keepdims = True), 3, axis = 1) / A

但这只有在没有条目的值为零时才有效。

有什么想法吗?谢谢!

编辑:我开发了

B = np.zeros((3, 3))
for i in range(3):
for j in range(3):
B[i, j] = np.prod(i, A[[x for x in range(3) if x != j]])

但肯定有更优雅的方法来实现这一点,它利用 numpy 的高效 C 后端而不是低效的 python 循环?

最佳答案

如果您愿意容忍单个循环:

B = np.empty_like(A)
for col in range(A.shape[1]):
B[:,col] = np.prod(np.delete(A, col, 1), 1)

计算您需要的内容,一次计算一列。它不像理论上那样有效,因为 np.delete()创建一个副本;如果您非常关心内存分配,请改用掩码:

B = np.empty_like(A)
mask = np.ones(A.shape[1], dtype=bool)
for col in range(A.shape[1]):
mask[col] = False
B[:,col] = np.prod(A[:,mask], 1)
mask[col] = True

关于python - 在 numpy 中,计算一个矩阵,其中每个单元格包含该行中所有其他条目的乘积,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22435175/

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