0

我最近想知道如何绕过以下 numpy 行为。从一个简单的例子开始:

    import numpy as np

a = np.array([[1,2,3,4,5,6,7,8,9,0], [11, 12, 13, 14, 15, 16, 17, 18, 19, 10]])

然后:

b = a.copy()
b[:, [0,1,4,8]] = b[:, [0,1,4,8]] + 50
print(b)

...打印结果:

[[51 52  3  4 55  6  7  8 59  0]
 [61 62 13 14 65 16 17 18 69 10]]

但也将一个索引加倍放入切片中:

c = a.copy()
c[:, [0,1,4,4,8]] = c[:, [0,1,4,4,8]] + 50
print(c)

给予:

[[51 52  3  4 55  6  7  8 59  0]
 [61 62 13 14 65 16 17 18 69 10]]

(简而言之;他们做同样的事情)

我也可以让索引 4 执行 2 次吗?或者更实际地;让切片元素 i 被赋予 r 次:我们可以让上面的表达式应用 r 次,而不是 numpy 只考虑一次吗?此外,如果我们将“50”替换为每次出现 i 时都不同的东西?

对于我当前的代码,我使用了:

w[p1] = w[p1] + D[pix]

我将“pix”、“p1”定义为一些具有 dtype int、相同长度和一些整数的 numpy 数组可能会出现多次。

(所以一个人可能同时拥有 pix = [..., 1,1,1,2,2,3,...] 和 p1 = [..., 21,32,13,23,11, 78,...],但是,因此它自己只将第一个 1 和相应的 21 用于索引 1,并刮掉其余的。)

当然,使用 for 循环可以轻松解决问题。关键是数组的整数和大小都很大,因此使用 for 循环而不是高效的 numpy-array 例程会花费大量计算资源。任何想法,现有文档的链接等?

4

0 回答 0