相关疑难解决方法(0)

为什么numpy.zeros占用的空间很小

我想知道为什么numpy.zeros占用这么小的空间?

x = numpy.zeros(200000000)
Run Code Online (Sandbox Code Playgroud)

这不占用任何记忆,

x = numpy.repeat(0,200000000)
Run Code Online (Sandbox Code Playgroud)

占用约1.5GB.numpy.zeros会创建一个空指针数组吗?如果是这样,有没有办法在cython中更改它后将指针设置为空?如果我使用:

x = numpy.zeros(200000000)
x[0:200000000] = 0.0
Run Code Online (Sandbox Code Playgroud)

内存使用率上升.有没有办法改变一个值,然后将其改回原来在python或cython中使用的格式numpy.zeros?

python arrays numpy cython

11
推荐指数
1
解决办法
1560
查看次数

Numpy中零的性能

我只是注意到这个zeros函数numpy有一个奇怪的行为:

%timeit np.zeros((1000, 1000))
1.06 ms ± 29.8 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

%timeit np.zeros((5000, 5000))
4 µs ± 66 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
Run Code Online (Sandbox Code Playgroud)

另一方面,ones似乎有一个正常的行为.有人知道为什么用这个zeros函数初始化一个小的numpy数组需要比一个大数组更多的时间?

(Python 3.5,numpy 1.11)

python numpy

6
推荐指数
1
解决办法
447
查看次数

为什么 np.zeros() 比使用 Python 在 Numba 中重新初始化现有数组更快?

为什么numpy.zeros()比重新初始化现有数组更快?

我从事计算机建模工作,并在工作中使用 numba。有时需要有一个归零数组来累积某些操作的结果。一般来说,我认为对已分配的数组进行清零不会比创建一个充满零的新数组慢,但事实并非如此。我知道延迟选择(例如为什么Python的Numpy零和空函数之间的速度差异会随着较大的数组大小而消失?https: //vorpus.org/blog/why-does-calloc-exist/),但它必须采取是时候将其归零了。

据我所知,np.zeros使用calloc和所有加速都来自此调用,并且应该可以为其他语言重现。有什么保证吗,总是这样吗?这是好的做法还是不好的做法?

import numpy as np
import numba as nb
import benchit
nb.set_num_threads(1)

@nb.njit
def numba_operation(in_arr, out):
    for i in range(out.shape[0]):
        for j in range(out.shape[1]):
            out[i,j] += in_arr[i,j] * 2 + 4
            
@nb.njit
def numba_operation_with_zeros(in_arr, out):
    for i in range(out.shape[0]):
        for j in range(out.shape[1]):
            out[i,j] = 0
    for i in range(out.shape[0]):
        for j in range(out.shape[1]):
            out[i,j] += in_arr[i,j] * 2 + 4

    
def every_time_generate_zeros(data):
    in_arr, out = data
    out …
Run Code Online (Sandbox Code Playgroud)

python numpy calloc dynamic-memory-allocation numba

5
推荐指数
1
解决办法
197
查看次数

np.empty与np.zeros的速度

我正在使用numpy版本1.14.3和python 2.7.12。

引用问题,我发现在使用np.zeros和np.empty初始化数组之间,速度有很大不同。但是,输出是相同的。

import numpy as np
r = np.random.random((50, 100, 100))
z = np.zeros(r.shape)
e = np.empty(r.shape)
np.allclose(e, z)
Run Code Online (Sandbox Code Playgroud)

这返回True。但是,计时功能%timeit给出了截然不同的结果:

%timeit z = np.zeros(r.shape)
Run Code Online (Sandbox Code Playgroud)

10000次循环,最佳3:每个循环143 µs

%timeit e = np.empty(r.shape)
Run Code Online (Sandbox Code Playgroud)

1000000循环,最佳3:每个循环1.83 µs

上面引用的先前接受的答案说,这np.zeros始终是更好的选择,并且它也更快。

为什么不使用比np.zeros快80倍并返回相同答案的np.empty?

编辑 正如user2285236指出,翻转初始化的顺序ze将打破平等,因为它会覆盖在相同的存储区。

python numpy python-2.7

1
推荐指数
1
解决办法
740
查看次数