如何根据条件更新二维numpy数组,但仍使用它的绝对值



具有以下功能:

def one_more_fix(matrix):
height, width = matrix.shape
for i in range(height):
for j in range(width):
if abs(matrix[i,j]) >= 180:
matrix[i,j] = abs(matrix[i,j]) - 360

示例输入和输出:

simple_matrix = np.array([
[179, 181, -182],
[179, 181, -182],
[361, -362, -183],

])

array([[ 179, -179, -178],
[ 179, -179, -178],
[   1,    2, -177]])

我想用一些";numpy magic";以移除循环并使其更快。尝试过这样的方法,但找不到如何更新原始矩阵的方法:

np.abs(simple_matrix1[np.abs(simple_matrix1) >= 180]) - 360

有什么建议吗?

首先获取要更改的索引(即满足条件的索引(

idx = (np.abs(simple_matrix) >= 180)  # this is a boolean array 

现在更新这些指数的值

simple_matrix[idx] = np.abs(simple_matrix[idx])-360

最新更新