arrays - 减去指定二维数组numpy中的元素

标签 arrays numpy

假设有一个矩阵 X、一个掩码和一个向量 y

>>> X
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11],
       [12, 13, 14, 15]])
>>> mask
array([[False,  True,  True,  True],
       [ True, False,  True,  True],
       [ True,  True, False,  True],
       [ True,  True,  True, False]], dtype=bool)
>>> y
[8, 9, 10]

我想要 X 的每一行,其中 mask 为 true 减去 y。所以我得到了结果

>>> x[mask].reshape(4,3)-y
array([[-7, -7, -7],
       [-4, -3, -3],
       [ 0,  0,  1],
       [ 4,  4,  4]])

但我想将 X 保留为 4*4 矩阵。这意味着当掩码为 False 时,X 的值不应更改。我应该怎么办?谢谢。

最佳答案

可以建议两种方法进行就地编辑。

方法#1: X 的 bool 索引。将其重新调整为具有与 y 中的元素数量相同的元素数量。从中减去y,从而利用广播。最后使用相同的掩码索引到 X 并分配展平的减值。 -

X[mask] = (X[mask].reshape(X.shape[0],-1) - y).ravel()

方法#2:调整 y 的大小,使其元素数量与 mask 中的 True 元素数量相同> 并简单地从 X 中的屏蔽位置中减去 -

X[mask] -= np.resize(y,mask.sum())

示例运行 -

In [55]: X    # Input array
Out[55]: 
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11],
       [12, 13, 14, 15]])

# Using approach #1
In [56]: X[mask] = (X[mask].reshape(X.shape[0],-1) - y).ravel()

In [57]: X  # Changed input array
Out[57]: 
array([[ 0, -7, -7, -7],
       [-4,  5, -3, -3],
       [ 0,  0, 10,  1],
       [ 4,  4,  4, 15]])

In [59]: X   # Input array
Out[59]: 
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11],
       [12, 13, 14, 15]])

# Using approach #2
In [60]: X[mask] -= np.resize(y,mask.sum())

In [61]: X    # Changed input array
Out[61]: 
array([[ 0, -7, -7, -7],
       [-4,  5, -3, -3],
       [ 0,  0, 10,  1],
       [ 4,  4,  4, 15]])

关于arrays - 减去指定二维数组numpy中的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45465464/

相关文章:

python - 将 rec.array 转换为数据帧

python - Scikit-Learn 的 Pipeline : A sparse matrix was passed, 但需要密集数据

javascript - 我想返回 Javascript 中包含对象数组的对象的一部分

matlab - 如何在不循环的情况下累积子矩阵(子数组平滑)?

c - 如何 malloc() 非默认类型的多维数组?

Numpy 多维对象的 Java 等价物

python - 如何从图片中提取单词的单个图像?

c# - 如何从流中获取字符串数组值?

javascript - 如何在Javascript中通过多个参数对非常大的数据数组进行排序

Python 中 Struct 和 Numpy 的内存泄漏