【问题标题】:How to modify a Numpy 2D array in every row but specific column indexes?如何修改每一行但特定列索引的 Numpy 2D 数组?
【发布时间】:2018-03-27 14:44:44
【问题描述】:

这就是我现在正在做的事情来实现我想要的。

In: 
a=numpy.zeros((3,2))
a[range(a.shape[0]),[0,0,1]] = 1
a
Out:
array([[ 1.,  0.],
       [ 1.,  0.],
       [ 0.,  1.]])

如您所见,我使用range 函数来选择a 中的所有行。还有其他更简洁的方法来选择每一行吗?

【问题讨论】:

  • Cleaner 字符更少?
  • 不,我的意思是像内置机制。例如当我们使用: 不带数字时,它可以选择整个维度。我无法让它在这里工作。是否有其他运营商为此目的?
  • 不,没有。
  • 这是选择这 3 个项目( (0,0),(1,0) 和 (2,1) )的正常方式。这是纯粹的简单 advanced 索引,有 2 个匹配列表。

标签: python arrays numpy


【解决方案1】:

这个具体的事情可以做得更干净,因为你只是在构建一个单热数组,并且有goodanswers for "在numpy 中执行此操作的“干净”方法。我推荐this@MartinThoma:

a = np.eye(2)[[0,0,1]]

此外,大多数机器学习包都有自己的 one-hot 编码方法,它比这个更有效和“干净”,因为机器学习是 one-hot 编码的最常见用途。

但是,在执行这种花哨的索引时,通常不可能消除 range 坐标。当您想将表示扩展到二维之外时,确实没有一种清晰、明确的方式来表示不会混淆的操作。并且一次在超过 2 个维度上工作是 numpy 的重点

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-21
    • 2015-01-14
    • 1970-01-01
    • 2018-10-12
    • 2021-11-03
    • 1970-01-01
    • 2023-03-30
    • 1970-01-01
    相关资源
    最近更新 更多