如果是 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
是矩阵,i
和j
是行和列的索引。
矩阵由 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
我有一个 5x5 矩阵,我想转置除 3 的倍数以外的所有值,它们将转置为以下结构:
如果是 3 的倍数:M[i, j] = (3 * j + i)**2
否则:M[i, j] = M[j, i]
M
是矩阵,i
和j
是行和列的索引。
矩阵由 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