簡體   English   中英

將1d numpy數組更改為3d numpy數組(python)

[英]Change 1d numpy array in to 3d numpy array (python)

我有一個帶有二進制元素的numpy形狀(271,)數組。

例如 :

arr = array([0., 0., 0., 1., 1., 1., 0., 0., 1., .........])

如何將其轉換為形狀為271 * 80 * 1的3d數組以形成new_3d_arr

這樣我的new_3d_arr[0]的形狀為80 rows with 0's* 1 column

我希望將有一個簡單的方法來實現這一目標。

我嘗試了下面的代碼,我可以得到所需的結果,但我希望會有一個簡單的方法來實現這一目標

 new_3d_arr = [] for i in arr: arr_2d = array([i]*80).reshape((-1,1)) new_3d_arr.append(arr_2d) new_3d_arr = array(new_3d_arr) 

U可以使用numpy.newaxis添加新軸,然后使用numpy.repeat將您的數組(新大小(271,1,1))沿軸1重復80次。這是代碼:

import numpy as np

arr = np.random.randint(0, 2, size=271)
print(arr.shape)  # out: (271,)
arr_3d = np.repeat(arr[:, np.newaxis, np.newaxis], 80, axis=1)
print(arr_3d.shape)  # out: (271, 80, 1)

希望這就是你想要的!

我不確定我是否正確理解您的問題。 根據我對形狀為(271,)的numpy數組的了解,您想要一個形狀為(271,80,1)的3d numpy數組,以便其余條目為0。

可能會有更有效的解決方案,但這是我想出的:

首先創建一個僅包含零的新numpy數組: new_3d_arr = np.zeros((271,80,1))

然后,對於長度為80的271個向量中的每一個,我們將第一個條目更改為帶有二進制條目的矢量。

for i in range(len(arr)):
      new_3d_arr[i][0][0] = arr[i]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM