[英]numpy list comprehension and +=/-= operator
我试图对一些列表计算进行矢量化处理,但是在尝试将列表用作索引时会发现一些奇怪的事情,尤其是当我尝试写回原始列表时,重复的列表索引似乎没有用:
import numpy as np
x = np.arange(10)
y = np.array([1,2,3,4,5])
z = np.array([1,1,1,1,1])
print(x[y], x[z])
>> out:[1 2 3 4 5] [1 1 1 1 1],与我预期的相同
x = np.arange(10)
x[y] -= 1
print(x[y])
>> out:[0 1 2 3 4]这很好,因为索引列表中没有重复
x = np.arange(10)
x[z] -= 1
print(x[y])
>> out:[0 2 3 4 5],在这里我期望的是[-4 2 3 4 5],这意味着x [1]应该-连续5次,但结果却只减去了一次
有一个缓冲问题。 ufuncs
被赋予了.at
来解决这个方法:
In [392]: np.add.at(x,z,-1)
In [394]: x[y]
Out[394]: array([-4, 2, 3, 4, 5])
我认为ufunc.at
的文档ufunc.at
说明了这一点
https://docs.scipy.org/doc/numpy/reference/generated/numpy.ufunc.at.html
它在其他SO问题中定期出现。
x[z] -= 1
评估如下:
x[z] = x[z] -1
当您期望:
for i in z:
x[i] -= 1
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.