将中的1d numpy数组更改为3d numpy数组(python)

将中的1d numpy数组更改为3d numpy数组(python),python,python-3.x,numpy,Python,Python 3.x,Numpy,我有一个带有二进制元素的形状(271,)的numpy数组 例如: arr = array([0., 0., 0., 1., 1., 1., 0., 0., 1., .........]) 如何将其转换为形状为271*80*1的3d数组以形成新的3d数组 这样,我的new\u 3d\u arr[0]的形状为80行,0*1列 我希望有一个简单的方法来实现这一点 我尝试了下面的代码&我可以得到我所需要的结果,但我希望有一种简单的方法来实现这一点 new_3d_arr=[] 对于arr中的i: ar

我有一个带有二进制元素的形状(271,)的numpy数组

例如:

arr = array([0., 0., 0., 1., 1., 1., 0., 0., 1., .........])
如何将其转换为形状为271*80*1的3d数组以形成新的3d数组

这样,我的
new\u 3d\u arr[0]
的形状为
80行,0*1列

我希望有一个简单的方法来实现这一点

我尝试了下面的代码&我可以得到我所需要的结果,但我希望有一种简单的方法来实现这一点

new_3d_arr=[]
对于arr中的i:
arr_2d=数组([i]*80)。重塑(-1,1))
新的三维阵列附加(阵列二维)

new_3d_arr=array(new_3d_arr)
U可以使用
numpy.newaxis
添加新轴,然后使用
numpy。重复
沿轴1重复阵列(新大小(271,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]

这个问题很难理解。你能考虑简化基本情况吗?例如,我假设您希望使用的方法对于长度为9的数组和形状为9*8*1的3d数组同样有效?从您的示例中不清楚您是否专门谈论此arr。您是否也可以提供简单的情况,您希望输出是什么样子的。谢谢@ColBates collynomial我在我的问题中添加了一些与我尝试的内容相关的东西。我希望pythonic方法能得到结果。。