我有一个带有二进制元素的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)
答案 0 :(得分:1)
U可以使用numpy.newaxis
添加新轴,然后使用numpy.repeat
沿轴1重复80次(新大小(271,1,1))数组。这是代码:
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)
希望这就是您想要的!!
答案 1 :(得分:0)
我不确定我是否正确理解您的问题。 根据您对形状为(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]