[英]Reshaping numpy array and converting columns to rows
我很抱歉標題含糊不清。 我有以下似乎無法解決的任務。 我有一個形狀數組(4,2,k)
。 我想在將列轉換為行時將其重塑為形狀(2,k*4)
。
這是一個示例輸入數組,其中 k=5:
sample_array = array([[[2., 2., 2., 2., 2.],
[1., 1., 1., 1., 1.]],
[[2., 2., 2., 2., 2.],
[1., 1., 1., 1., 1.]],
[[2., 2., 2., 2., 2.],
[1., 1., 1., 1., 1.]],
[[2., 2., 2., 2., 2.],
[1., 1., 1., 1., 1.]]])
我已經設法通過for-loop
獲得所需的 output
twos=np.array([])
ones=np.array([])
for i in range(len(sample_array)):
twos = np.concatenate([twos, sample_array[i][0]])
ones = np.concatenate([ones, sample_array[i][1]])
desired_array = np.array([twos, ones])
desired array
如下所示:
array([[2., 2., 2., 2., 2., 2., 2., 2., 2., 2., 2., 2., 2., 2., 2., 2.,
2., 2., 2., 2.],
[1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.,
1., 1., 1., 1.]])
我的任務有更優雅的解決方案嗎? 我嘗試過.reshape()、.transpose()、.ravel(),但似乎從來沒有得到想要的結果。
如果這是重復的,我很抱歉,我查看了幾十個 StackOverflow Q,但沒有找到解決方案。
您可以swapaxes
和reshape
:
sample_array.swapaxes(0, 1).reshape(sample_array.shape[1], -1)
output:
array([[2., 2., 2., 2., 2., 2., 2., 2., 2., 2., 2., 2., 2., 2., 2., 2.,
2., 2., 2., 2.],
[1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.,
1., 1., 1., 1.]])
我認為簡單的水平堆棧hstack
應該可以正常工作:
>>> np.hstack(sample_array)
array([[2., 2., 2., 2., 2., 2., 2., 2., 2., 2., 2., 2., 2., 2., 2., 2.,
2., 2., 2., 2.],
[1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.,
1., 1., 1., 1.]])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.