gpt4 book ai didi

python - NumPy:使用自身修改数组时出现错误结果

转载 作者:行者123 更新时间:2023-11-28 18:41:22 25 4
gpt4 key购买 nike

import numpy as np
bc = np.arange(10) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

# regular way using NumPy function
np.diff(bc) # array([1, 1, 1, 1, 1, 1, 1, 1, 1])

# something similar with array subtraction:
bc[1:] - bc[:-1] # array([1, 1, 1, 1, 1, 1, 1, 1, 1])

# but this does the wrong thing:
bc[1:] -= bc[:-1] # array([0, 1, 1, 2, 2, 3, 3, 4, 4, 5])

作为一名 C 和 C++ 程序员,我可以理解为什么会发生这种情况(再次使用 memcpy() 而不是 memmove()),但 Python 和 NumPy 的最终用户似乎不会想到这一点。而且我没有找到任何说明这行不通的文件。

问题是:这里的 NumPy 中是否存在错误(可能没有),或者是否有一些 NumPy 文档解释了这种情况下的规则,或者文档中是否缺少该错误?

其次,我想找出一个在空间和时间上准最优的安全可行的解决方案。也就是说,它不应该分配超出常量的内存,也不应该是一个愚蠢的纯 Python“for”循环。 :) 这些是人们可能希望通过显然行不通的就地修改实现的目标。

我正在使用 NumPy 1.8.0。

最佳答案

我再次在这里发帖以更正我的答案。也许试试:

bc-=np.roll( bc , 1 )

#array([-9, 1, 1, 1, 1, 1, 1, 1, 1, 1])
#this arrays length is 10

#and then for an array with length 9
bc=bc[ 1 : ]

#array([1, 1, 1, 1, 1, 1, 1, 1, 1])

抱歉之前没理解问题,

结果原因:

'array([0, 1, 1, 2, 2, 3, 3, 4, 4, 5])'

这个 Action 实际上被语法化为推导

let (say...) a=array([0,1,2,3,4,5,6,7,8,9])
updated a <- will be formed as [0, 1-0=1,2-1=1,3-1=2,4-2=2,5-2=3,6-3=3,7-3=4,8-4=4,9-4=5]

我想你真正想要的是上面

tnx EdChum

关于python - NumPy:使用自身修改数组时出现错误结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25660713/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com