我最近想知道如何绕过以下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执行两次吗? 或更实际地;让slice元素给我r次:我们可以让上述表达式应用r次,而不是numpy只考虑一次吗?另外,如果我们用每次出现i时都不同的方式代替“ 50”?
对于我当前的代码,我使用:
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的前1个和对应的21个就被删除了。)
当然,使用for循环可以轻松解决此问题。关键是数组的整数和大小都很大,因此使用for循环而不是有效的numpy-array例程会花费大量计算资源。有任何想法,现有文档的链接等吗?