如何在numpy Python

时间:2018-02-11 11:34:15

标签: python arrays python-3.x numpy

我有一个像这样的布尔numpy数组,

>>> np_arr
array([[1, 1, 1, 1, 0, 0, 1, 1],
       [1, 1, 1, 1, 0, 0, 1, 1],
       [1, 1, 1, 1, 0, 0, 1, 1],
       [1, 1, 1, 1, 0, 0, 1, 1],
       [1, 1, 1, 1, 0, 0, 1, 1],
       [1, 1, 1, 1, 0, 1, 0, 0],
       [1, 1, 1, 1, 0, 1, 0, 0],
       [1, 1, 1, 1, 0, 1, 0, 0]])

和另一个像这样的一维数组,

>>> another_arr
array([128,  64,  32,  16,   8,   4,   2,   1])

我想以某种方式做一些添加来获取只存在1的值,

>>> np_arr
array([[128,64,32,8, 0, 0, 2, 1],
       [128,64,32,8, 0, 0, 2, 1],
         ....................
       [128,64,32,8, 0,4, 0, 0],
        .....................)

然后我可以将它们相加以找到2D数组中每个1D数组的二进制值。 或者是获得十进制值numpy数组的一些简单方法吗?

3 个答案:

答案 0 :(得分:4)

这是一种方式。它起作用是因为numpy隐式广播。

import numpy as np

mask = np.array([[1, 1, 1, 1, 0, 0, 1, 1],
                 [1, 1, 1, 1, 0, 0, 1, 1],
                 [1, 1, 1, 1, 0, 0, 1, 1],
                 [1, 1, 1, 1, 0, 0, 1, 1],
                 [1, 1, 1, 1, 0, 0, 1, 1],
                 [1, 1, 1, 1, 0, 1, 0, 0],
                 [1, 1, 1, 1, 0, 1, 0, 0],
                 [1, 1, 1, 1, 0, 1, 0, 0]])

arr = np.array([128,  64,  32,  16,   8,   4,   2,   1])

arr2 = arr * mask

# array([[128,  64,  32,  16,   0,   0,   2,   1],
#        [128,  64,  32,  16,   0,   0,   2,   1],
#        [128,  64,  32,  16,   0,   0,   2,   1],
#        [128,  64,  32,  16,   0,   0,   2,   1],
#        [128,  64,  32,  16,   0,   0,   2,   1],
#        [128,  64,  32,  16,   0,   4,   0,   0],
#        [128,  64,  32,  16,   0,   4,   0,   0],
#        [128,  64,  32,  16,   0,   4,   0,   0]])

答案 1 :(得分:4)

您需要的可能是:

import numpy as np


ar = np.array([[1, 1, 1, 1, 0, 0, 1, 1],
               [1, 1, 1, 1, 0, 0, 1, 1],
               [1, 1, 1, 1, 0, 0, 1, 1],
               [1, 1, 1, 1, 0, 0, 1, 1],
               [1, 1, 1, 1, 0, 0, 1, 1],
               [1, 1, 1, 1, 0, 1, 0, 0],
               [1, 1, 1, 1, 0, 1, 0, 0],
               [1, 1, 1, 1, 0, 1, 0, 0]])

np.packbits(ar, axis=-1)

结果:

array([[243],
       [243],
       [243],
       [243],
       [243],
       [244],
       [244],
       [244]], dtype=uint8)

答案 2 :(得分:0)

这是一种快速而又肮脏的方式。

import numpy as np

ar = np.array([[1, 1, 1, 1, 0, 0, 1, 1],
               [1, 1, 1, 1, 0, 0, 1, 1],
               [1, 1, 1, 1, 0, 0, 1, 1],
               [1, 1, 1, 1, 0, 0, 1, 1],
               [1, 1, 1, 1, 0, 0, 1, 1],
               [1, 1, 1, 1, 0, 1, 0, 0],
               [1, 1, 1, 1, 0, 1, 0, 0],
               [1, 1, 1, 1, 0, 1, 0, 0]])


a = np.array([17, 16, 12, 41, 0, 0, 5, 12])
for _ in ar:
    m = np.multiply(_, a)
    print(m)

这里我打印了这些值,但您可以将它们附加到数组中或按照您的喜好使用。