【问题标题】:Python - mutate row elements using array of indicesPython - 使用索引数组改变行元素
【发布时间】:2016-12-19 17:25:03
【问题描述】:

给定以下数组:

import numpy as np

a = np.array([[1,2,3], [4,5,6], [7,8,9], [10, 11, 12]])

我可以创建一个索引数组:

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

并使用索引从每一行中改变一个元素:

a[np.arange(4),b] += 10

产生:

[[11  2  3]
 [ 4  5 16]
 [17  8  9]
 [10 21 12]]

有没有比a[np.arange(4),b] += 10更易读的方法来获得相同的结果?

【问题讨论】:

  • 对我来说看起来不错。你觉得什么不可读?
  • 对于像我这样的菜鸟来说有点神秘。我想知道我是否可以在arange() 周围工作。
  • 如果我在那里正确理解了 readable 的解释,则将实现隐藏在具有 可读 代码的好名称的 func 中 :) 花很少的钱分钟 NumPy indexing docs,这很有趣,相信我!
  • 您可以使用 cmets 使其更具可读性:-)
  • 对于小尺寸数组a[range(b.size), b] 可能更易读?

标签: python arrays numpy


【解决方案1】:

也许更明确地写出来有助于“可读性”:

x = np.array([0, 2, 0, 1])
y = numpy.arange(x.size)
a[y, x] += 10

否则,在我看来,您这样做的方式非常清晰简洁。

另一种选择是使用ufunc

numpy.add.at(a, [y,x], 10)

或者如果你不想使用numpy.arange:

y = numpy.indices((x.size,))

【讨论】:

    猜你喜欢
    • 2011-10-18
    • 1970-01-01
    • 2014-09-29
    • 1970-01-01
    • 2015-08-15
    • 2015-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多