我基本上试图实现this,但需要以不同的方式展开。我希望连接N-1th
维度的所有样本。例如,如果我的展开应用于(100,100,3)的RGB图像,则新阵列基本上将成为(100,300),其中3个颜色通道图像现在并排在新阵列中。
我尝试使用整齐的内置numpy函数(例如flatten
和concatenate
)没有产生任何结果。 (flatten
,因为最终目标是应用此展开,直到它是一维数组)
甚至无法想到在循环中执行此操作的切片方式,因为维度的起始数量不是常数(array = array[:,...,:,0]+...+array[:,...,:,0]
)
修改
我想出了这种实现我想要的方式,但仍然会欢迎更好,更纯粹的numpy
解决方案。
shape = numpy.random.randint(100, size=numpy.random.randint(100))
array = numpy.random.uniform(size=shape)
array = array.T
for i in range(0, len(shape)-1, -1):
array = numpy.concatenate(array)
答案 0 :(得分:0)
我是否正确地推断你想要压扁阵列的最后2个维度?
In [96]: shape = numpy.random.randint(10, size=numpy.random.randint(10))+1
In [97]: shape
Out[97]: array([2, 7, 2])
In [98]: newshape=tuple(shape[:-2])+(-1,)
In [99]: arr = np.arange(np.prod(shape)).reshape(shape)
In [100]: arr.shape
Out[100]: (2, 7, 2)
In [101]: arr.reshape(newshape).shape
Out[101]: (2, 14)
In [102]: arr.reshape(newshape)
Out[102]:
array([[ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13],
[14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27]])
如果你不喜欢最后一个维度中的术语顺序,你可能需要转置
In [109]: np.swapaxes(arr, -1,-2).reshape(newshape)
Out[109]:
array([[ 0, 2, 4, 6, 8, 10, 12, 1, 3, 5, 7, 9, 11, 13],
[14, 16, 18, 20, 22, 24, 26, 15, 17, 19, 21, 23, 25, 27]])
我无法针对您的代码对其进行测试,因为range(0,len(shape)-1, -1)
是一个空范围。
我认为你不想要
In [112]: np.concatenate(arr,axis=-1).shape
Out[112]: (7, 4)
In [113]: np.concatenate((arr[0,...],arr[1,...]), axis=-1)
Out[113]:
array([[ 0, 1, 14, 15],
[ 2, 3, 16, 17],
[ 4, 5, 18, 19],
[ 6, 7, 20, 21],
[ 8, 9, 22, 23],
[10, 11, 24, 25],
[12, 13, 26, 27]])
将arr分割在第1轴上,然后将其连接到最后一个轴上。