我想要能够将一个现有的二维数组转换为一个一维数组的数组。我所找到的唯一方法是使用类似以下的方式:
但如果数组长度相同,numpy会自动将其转换为二维数组:
my_2d_array = np.random.random((5, 3))
my_converted_array = np.zeros(len(my_2d_array), dtype='O')
for i, row in enumerate(my_converted_array):
my_converted_array[i] = row
你是否有更快、更简洁的方法来完成这个任务?
如果内部数组的形状不同,也是可能的,例如:
my_1d_array = np.array([
np.array([0, 1], dtype=np.float),
np.array([2], dtype=np.float)
], dtype='O')
assert my_array.shape == (2,)
但如果数组长度相同,numpy会自动将其转换为二维数组:
my_2d_array = np.array([
np.array([0, 1], dtype=np.float),
np.array([2, 3], dtype=np.float)
], dtype='O')
assert my_array.shape == (2, 2)
编辑:为了澄清一些答案,我不能使用flatten
、reshape
或ravel
,因为它们会保持相同数量的元素。相反,我想从形状为(N, M)
的二维数组转换为形状为(N,)
的一维数组,其中每个对象(1D数组)都具有形状(M,)
。
new_array[:] = list(2d_array)
可以作为枚举循环的替代方案。无论如何,您都必须从正确大小的对象数组开始。 - hpaulj