Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/334.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中的映射_Python_Arrays_List_Numpy_Bit Manipulation - Fatal编程技术网

Python Numpy中的映射

Python Numpy中的映射,python,arrays,list,numpy,bit-manipulation,Python,Arrays,List,Numpy,Bit Manipulation,给定一个3d numpy数组,我想提取数字的2个最低有效位: 例如,让 img = [[[30, 31, 32], [33, 34, 35], [36, 37, 38], [39, 40, 41], [42, 43, 44]], [[45, 46, 47], [48, 49, 50], [51, 52, 53], [54, 55, 56], [57, 58, 59]]] 其中每个像素[30,31,32]或[33,34,35

给定一个3d numpy数组,我想提取数字的2个最低有效位:

例如,让

img = [[[30, 31, 32],
    [33, 34, 35],
    [36, 37, 38],
    [39, 40, 41],
    [42, 43, 44]],

   [[45, 46, 47],
    [48, 49, 50],
    [51, 52, 53],
    [54, 55, 56],
    [57, 58, 59]]]
其中每个像素[30,31,32]或[33,34,35]。。。以此类推,分别表示R、G、B值

我想提取2个最低有效位,并将这些数字连接起来以创建一个6位数字

对于([30,31,32]),两个LSB分别为10,11和00。 然后将其连接在一起,形成101100,十进制为44。目标是为给定数组中的每个“像素”创建一个数字列表


我想对数组中的每个“像素”使用numpy操作,而不使用for循环

该位屏蔽了较低的两位,然后将每个三元组移位,然后求和:

img = [[[30, 31, 32],
    [33, 34, 35],
    [36, 37, 38],
    [39, 40, 41],
    [42, 43, 44]],

   [[45, 46, 47],
    [48, 49, 50],
    [51, 52, 53],
    [54, 55, 56],
    [57, 58, 59]]]

import numpy as np

print ((np.array(img) & 0b11) << np.array([4,2,0])).sum(axis=2)

我相信它可以做得更好,但这确实得到了要求的结果。

此位屏蔽了较低的两位,然后将每个三元组移位,然后求和:

img = [[[30, 31, 32],
    [33, 34, 35],
    [36, 37, 38],
    [39, 40, 41],
    [42, 43, 44]],

   [[45, 46, 47],
    [48, 49, 50],
    [51, 52, 53],
    [54, 55, 56],
    [57, 58, 59]]]

import numpy as np

print ((np.array(img) & 0b11) << np.array([4,2,0])).sum(axis=2)

我相信它可以做得更好,但这确实得到了要求的结果。

为什么没有for循环?有没有试过?@0xc0de:for在NumPy数组上循环比使用其他方法要慢得多。我同意。我想这是一个编程练习,如果OP也能考虑一下,那为什么没有for循环呢?有没有试过?@0xc0de:for在NumPy数组上循环比使用其他方法要慢得多。我同意。我想这是一些编程练习,如果OP也考虑一下的话,我会得到
ValueError:“axis”条目超出了范围。。。。另外,我还必须修正一个打字错误。是的,它与
print((np.array(img)和0b11)一起工作。实际上我的坏,我有
来自未来的导入打印功能默认情况下可以生成
np.array([4,2,0])
通过
np.arange(3)[:-1]*2
。或者
np arange(5)[:-2]
。我得到了
ValueError:“axis”条目超出了范围。
我还必须修正一个打字错误。是的,它可以使用
print(((np.array(img)和0b11)实际上我的错误,我有
来自未来的导入打印功能默认情况下,
可以通过
np.arange(3)[:-1]生成
np.array([4,2,0])
*2
np.arange(5)[::-2]