numpy列表理解和+=/=op

2024-09-29 21:59:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图对一些列表计算进行矢量化,但是当我试图使用列表作为索引时,发现一些奇怪的地方,特别是当我试图写回原始列表时,重复的列表索引似乎没有用:

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])

>;出局:[1 2 3 4 5][1 1 1 1 1],与我预期的一样

x = np.arange(10)
x[y] -= 1
print(x[y])

>;输出:[0 1 2 3 4]这就像索引列表中没有重复一样好

x = np.arange(10)
x[z] -= 1
print(x[y])

>;结果:[0 2 3 4 5],这里我期望[-4 2 3 4 5],这意味着x[1]应该——5次,但结果只减去一次


Tags: importgtnumpy列表as地方nparray
1条回答
网友
1楼 · 发布于 2024-09-29 21:59:03

存在缓冲问题。ufuncs给出了.at方法来解决这个问题:

In [392]: np.add.at(x,z,-1)
In [394]: x[y]
Out[394]: array([-4,  2,  3,  4,  5])

我认为ufunc.at的文档很好地解释了这一点

https://docs.scipy.org/doc/numpy/reference/generated/numpy.ufunc.at.html

在其他一些问题中,它会周期性地出现。你知道吗

x[z] -= 1

评估如下:

x[z] = x[z] -1

当你期待的时候:

for i in z:
    x[i] -= 1

相关问题 更多 >

    热门问题