在python中通过另外两个修改的数组
假设我们有三个一维阵列:在python中通过另外两个修改的数组,python,numpy,Python,Numpy,假设我们有三个一维阵列: A(如长度为5) B(相同长度,示例中为5) C(长得多,比如说长度100) C最初用零填充A给出了应更改的C元素的索引(它们可能重复),而B给出了应添加到C初始零的值。例如,如果A=[1,3,3,29]和B=[2,3,4,2,3],C[1]应该变成2,C[3]-9,C[29]-3;所有其他C元素应保持为0。 我把它写成for循环: for i in range(len(A) - 1): C[A[i]] = C[A[i]] + B[i] 但是在向量形式的n
- A(如长度为5)
- B(相同长度,示例中为5)
- C(长得多,比如说长度100)
C
最初用零填充A
给出了应更改的C
元素的索引(它们可能重复),而B
给出了应添加到C
初始零的值。例如,如果A=[1,3,3,29]
和B=[2,3,4,2,3]
,C[1]
应该变成2,C[3]-9
,C[29]-3
;所有其他C
元素应保持为0。
我把它写成for循环:
for i in range(len(A) - 1):
C[A[i]] = C[A[i]] + B[i]
但是在向量形式的
numpy
中有没有更有效的方法来实现同样的功能?我认为您可以使用bincount
,至少在一维情况下是这样的:
>>> A = np.array([1,3,3,3,29])
>>> B = np.array([2,3,4,2,3])
>>> np.bincount(A, B)
array([ 0., 2., 0., 9., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
0., 0., 0., 3.])
(旁白:使用
numpy
索引时重复的值可能会表现得非常奇怪,并且很容易被您在简单情况下看到的行为引入歧途。我完全避免它们,因为这种行为几乎从来都不是我想要的。)我不认为您的意思是len(A)-1
;这将跳过最后一个元素(29和3),因为range
不包括上限<代码>范围(3)=[0,1,2]。