【问题标题】:How to fill elements of a matrix with indices taken from another matrix in python如何用从python中的另一个矩阵获取的索引填充矩阵的元素
【发布时间】:2019-05-29 09:07:45
【问题描述】:

我有以下代码,它构造了两个矩阵a(3*2 零矩阵)和b。我想将矩阵a 中的0s 替换为1s,具体取决于存储在索引b 中的索引位置。我想在没有for 循环的情况下做到这一点。

import numpy as np

a = np.zeros((3, 2))
b = np.array([0, 1, 0])

输出应该是

c = [[1, 0],
     [0, 1],
     [1, 0]]

【问题讨论】:

  • 你能把c显示为一个合适的二维数组吗?
  • 那你是说b的每个元素对应a的一行,并告诉你设置哪个索引?

标签: python numpy matrix indexing


【解决方案1】:

Numpy 花式索引是您的朋友。要使b 作为列索引,您需要一个与b 大小相等的数组,它会告诉您每个索引适用的行:

a[np.arange(b.size), b] = 1

这会就地修改a。如果这不是您想要的,请先复制一份:

c = a.copy()
c[np.arange(b.size), b] = 1

【讨论】:

  • 您也可以使用a[range(len(b)),b] = 1。也许你可以添加这个作为替代
  • @Bazingaa。如果我没记错的话,那是一个虚假的内存节省设备。在内部,无论您如何传入索引,索引都将扩展为一个 numpy 数组。
  • 无论如何,既然 NumPy 已经用于创建矩阵,它排除了导入过度的点。所以,是的,np.arange 有道理
  • @Bazingaa。确切地。如果您已经在使用该库,则无需犹豫。
  • @MadPhysicist 非常感谢你,这对我来说非常适合
猜你喜欢
  • 1970-01-01
  • 2012-02-24
  • 2017-02-10
  • 1970-01-01
  • 1970-01-01
  • 2018-05-06
  • 1970-01-01
  • 1970-01-01
  • 2017-02-13
相关资源
最近更新 更多