Numpy 根据形状相同的数组中的逻辑和值替换元素
Numpy replacing elements based on logic and value in an identically shaped array
我有 2 个 numpy 数组。一个填充布尔值,另一个填充数值。
我将如何根据布尔数组中的当前值对数值数组执行逻辑。
例如如果为 true 且 > 5,则将值设置为 false
matrix1
matrix2
newMatrix = matrix1 > 5 where matrix2 value is false
请注意,这些数组具有相同的形状,例如
[[0, 1, 1],
[1, 0, 0]]
和
[[3, 1, 0]
[6, 2, 6]]
我想要的结果是一个新的布尔矩阵,如果它在布尔数组中的值为真并且数值数组中的等效值大于 5,则该矩阵为真,例如
[[0, 0, 0]
[1, 0, 0]]
newMatrix = np.logical_and(matrix2 == 0, matrix1 > 5 )
这将遍历所有元素,并在 matrix == 0
和 matrix1 > 5
的布尔值对之间生成 'and'。请注意,matrix1 > 5
类型的表达式会生成一个布尔值矩阵。
如果你想要 0,1 而不是 False,True,你可以在结果中加上 +0:
newMatrix = np.logical_and(matrix2 == 0, matrix1 > 5 ) + 0
最清晰方式:
import numpy as np
matrix1 = np.array([[3, 1, 0],
[6, 2, 6]])
matrix2 = np.array([[0, 1, 1],
[1, 0, 0]])
r,c = matrix1.shape
res = np.zeros((r,c))
for i in range(r):
for j in range(c):
if matrix1[i,j]>5 and matrix2[i,j]==1:
res[i,j]=1
结果
array([[0., 0., 0.],
[1., 0., 0.]])
一种更高级的方式,使用numpy.where()
:
import numpy as np
matrix1 = np.array([[3, 1, 0],
[6, 2, 6]])
matrix2 = np.array([[0, 1, 1],
[1, 0, 0]])
r,c = matrix1.shape
res = np.zeros((r,c))
res[np.where((matrix1>5) & (matrix2==1))]=1
结果
array([[0., 0., 0.],
[1., 0., 0.]])
我有 2 个 numpy 数组。一个填充布尔值,另一个填充数值。
我将如何根据布尔数组中的当前值对数值数组执行逻辑。
例如如果为 true 且 > 5,则将值设置为 false
matrix1
matrix2
newMatrix = matrix1 > 5 where matrix2 value is false
请注意,这些数组具有相同的形状,例如
[[0, 1, 1],
[1, 0, 0]]
和
[[3, 1, 0]
[6, 2, 6]]
我想要的结果是一个新的布尔矩阵,如果它在布尔数组中的值为真并且数值数组中的等效值大于 5,则该矩阵为真,例如
[[0, 0, 0]
[1, 0, 0]]
newMatrix = np.logical_and(matrix2 == 0, matrix1 > 5 )
这将遍历所有元素,并在 matrix == 0
和 matrix1 > 5
的布尔值对之间生成 'and'。请注意,matrix1 > 5
类型的表达式会生成一个布尔值矩阵。
如果你想要 0,1 而不是 False,True,你可以在结果中加上 +0:
newMatrix = np.logical_and(matrix2 == 0, matrix1 > 5 ) + 0
最清晰方式:
import numpy as np
matrix1 = np.array([[3, 1, 0],
[6, 2, 6]])
matrix2 = np.array([[0, 1, 1],
[1, 0, 0]])
r,c = matrix1.shape
res = np.zeros((r,c))
for i in range(r):
for j in range(c):
if matrix1[i,j]>5 and matrix2[i,j]==1:
res[i,j]=1
结果
array([[0., 0., 0.],
[1., 0., 0.]])
一种更高级的方式,使用numpy.where()
:
import numpy as np
matrix1 = np.array([[3, 1, 0],
[6, 2, 6]])
matrix2 = np.array([[0, 1, 1],
[1, 0, 0]])
r,c = matrix1.shape
res = np.zeros((r,c))
res[np.where((matrix1>5) & (matrix2==1))]=1
结果
array([[0., 0., 0.],
[1., 0., 0.]])