繁体   English   中英

numpy列表理解和+ = /-=运算符

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM