Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中通过另外两个修改的数组_Python_Numpy - Fatal编程技术网

在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]。