将大块的Numpy阵列转换为元组



我有一个像这样的numpy数组

array([[243],
       [243],
       [243],
       [243],
       [243],
       [243],
       [243],
       [245],
       [244],
       [244],
       [244],
       [243],

,其中的每三个元素都将转换为元组!我写了一个像这样的简单生成器

def RGBchunks(a_list):
    for i in range(0,len(a_list),3):
        temp = []
        for j in range(3):
            temp.extend(a_list[i+j])
        yield tuple(temp)

给出了我想要的东西,

>>> for i in RGBchunks(my_arr):
         print(i)

(243, 243, 243)
(243, 243, 243)
(243, 243, 243)
(244, 244, 244)
(245, 245, 245)
(244, ........
..............
(243, 243, 243)

我很好奇知道是否有一些简单的优雅方法可以在numpy中做到这一点!大概是新列表中的所有这些元组?任何pythonic的方式都是我很好奇。提高性能也将非常好!

如果这是一个简单的重塑操作而没有任何重叠的操作,请使用 reshape

my_arr.reshape(-1, 3)

或,

np.reshape(my_arr, (-1, 3))

array([[243, 243, 243],
       [243, 243, 243],
       [243, 245, 244],
       [244, 244, 243]])

如果您真的想要一个元组列表,请在重塑结果上致电map

list(map(tuple, my_arr.reshape(-1, 3)))

或,具有绩效的列表理解:

[tuple(x) for x in my_arr.reshape(-1, 3)]

[(243, 243, 243), (243, 243, 243), (243, 245, 244), (244, 244, 243)]

对于重叠的步伐,有stride_tricks

f = np.lib.stride_tricks.as_strided
n = 3
f(my_arr, shape=(my_arr.shape[0] - (n + 1), n), strides=my_arr.strides)
array([[243, 243, 243],
       [243, 243, 243],
       [243, 243, 243],
       [243, 243, 243],
       [243, 243, 243],
       [243, 243, 245],
       [243, 245, 244],
       [245, 244, 244],
       [244, 244, 244],
       [244, 244, 243]])

最新更新