我有一个像这样的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]])