如果是 3 的倍数,则仅使用 numpy 转置矩阵值

Transpose only the matrix values with numpy if multiple of 3

我有一个 5x5 矩阵,我想转置除 3 的倍数以外的所有值,它们将转置为以下结构:

如果是 3 的倍数:M[i, j] = (3 * j + i)**2 否则:M[i, j] = M[j, i]

M是矩阵,ij是行和列的索引。

矩阵由 1 到 100 的 25 个值组成,没有重复。

我有以下代码,现在我已经为 3 的倍数的值创建了条件。我不知道如何创建它应该做的部分:

M[i, j] = (3 * j + i)**2

我把 0 作为结果只是为了显示 (3 * j + i)**2 应该出现的位置。

import numpy as np
M = np.random.randint(1, 100, size=25).reshape(5, 5)
print("Matrix 5x5 original")
print(M)
print("Matrix transposed")
M = np.transpose(M)
M[M % 3 == 0] = 0
print(M)

您需要将掩码 M % 3 == 0 转换为索引。这样的事情应该有效:

M = M.T
i, j = np.where(M % 3 == 0)
M[i, j] = (3 * j + i)**2