将 1d numpy array 更改为 3d numpy array (python)



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

例如:

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)

您可以使用numpy.newaxis添加新轴,然后使用numpy.repeat沿轴 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]

最新更新