Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python numpy数组-有效地从A中减去B的每一行_Python_Arrays_Numpy_Array Broadcasting - Fatal编程技术网

Python numpy数组-有效地从A中减去B的每一行

Python numpy数组-有效地从A中减去B的每一行,python,arrays,numpy,array-broadcasting,Python,Arrays,Numpy,Array Broadcasting,我有两个numpy数组a和b。我想从a中减去b的每一行。我尝试使用: a1 - b1[:, None] 这适用于小型阵列,但在实际数据大小方面花费的时间太长 a = np.arange(16).reshape(8,2) a Out[35]: array([[ 0, 1], [ 2, 3], [ 4, 5], [ 6, 7], [ 8, 9], [10, 11], [12, 13],

我有两个numpy数组a和b。我想从a中减去b的每一行。我尝试使用:

a1 - b1[:, None]
这适用于小型阵列,但在实际数据大小方面花费的时间太长

a = np.arange(16).reshape(8,2)

a
Out[35]: 
array([[ 0,  1],
       [ 2,  3],
       [ 4,  5],
       [ 6,  7],
       [ 8,  9],
       [10, 11],
       [12, 13],
       [14, 15]])

b = np.arange(6).reshape(3,2)

b
Out[37]: 
array([[0, 1],
       [2, 3],
       [4, 5]])

a - b[:, None]
Out[38]: 
array([[[ 0,  0],
        [ 2,  2],
        [ 4,  4],
        [ 6,  6],
        [ 8,  8],
        [10, 10],
        [12, 12],
        [14, 14]],

       [[-2, -2],
        [ 0,  0],
        [ 2,  2],
        [ 4,  4],
        [ 6,  6],
        [ 8,  8],
        [10, 10],
        [12, 12]],

       [[-4, -4],
        [-2, -2],
        [ 0,  0],
        [ 2,  2],
        [ 4,  4],
        [ 6,  6],
        [ 8,  8],
        [10, 10]]])

%%timeit
a - b[:, None]
The slowest run took 10.36 times longer than the fastest. This could mean that an intermediate result is being cached.
100000 loops, best of 3: 3.18 µs per loop
对于较大的阵列,此方法速度太慢/效率太低

a1 = np.arange(18900 * 41).reshape(18900, 41)

b1 = np.arange(2674 * 41).reshape(2674, 41)

%%timeit
a1 - b1[:, None]
1 loop, best of 3: 12.1 s per loop

%%timeit
for index in range(len(b1)):
    a1 - b1[index]
1 loop, best of 3: 2.35 s per loop

有什么小把戏可以让我加快速度吗

你在玩弄内存限制

如果与示例中一样,8位足以存储数据,请使用uint8:

import numpy as np
a1 = np.arange(18900 * 41,dtype=np.uint8).reshape(18900, 41)
b1 = np.arange(2674 * 41,dtype=np.uint8).reshape(2674, 41)
%time c1=(a1-b1[:,None])
#1.02 s

你在玩弄内存限制

如果与示例中一样,8位足以存储数据,请使用uint8:

import numpy as np
a1 = np.arange(18900 * 41,dtype=np.uint8).reshape(18900, 41)
b1 = np.arange(2674 * 41,dtype=np.uint8).reshape(2674, 41)
%time c1=(a1-b1[:,None])
#1.02 s