Dsc*_*oni 8 python arrays numpy division
因此,在numpy 1.8.2(使用python 2.7.6)中,阵列分割似乎存在问题.当使用其自身的一部分执行足够大的数组(至少8192个元素,多于一个维度,数据类型无关)的就地划分时,对于不同的符号,行为是不一致的.
import numpy as np
arr = np.random.rand(2, 5000)
arr_copy = arr.copy()
arr_copy = arr_copy / arr_copy[0]
arr /= arr[0]
print np.sum(arr != arr_copy), arr.size - np.sum(np.isclose(arr, arr_copy))
Run Code Online (Sandbox Code Playgroud)
输出预计为0,因为两个分区应该是一致的,但它是1808.这是一个错误吗?是否也发生在其他numpy版本?
这不是一个真正的错误,就像你在问题中建议的缓冲区大小一样.将缓冲区大小设置得更大可以解决问题(现在......):
>>> np.setbufsize(8192*4) # sets new buffer size, returns current size
8192
>>> # same set up as in the question
>>> np.sum(arr != arr_copy), arr.size - np.sum(np.isclose(arr, arr_copy))
(0, 0)
Run Code Online (Sandbox Code Playgroud)
正如你在评论中arr /= arr[0]所说,原地分工是最初出错的地方.仅arr缓存的第一个8192元素arr[0]只是第一行的视图arr.
这意味着第一行中的所有5000个值将被自己正确划分,第二行也将正确到索引3192.接下来,剩余的1808个值被放入缓冲区以进行就地划分但第一行有已经改变:arr[0]现在只是一行的视图,所以后面的列中的值将被除以1.
| 归档时间: |
|
| 查看次数: |
288 次 |
| 最近记录: |