从 2d numpy 数组创建 3d numpy 数组

create a 3d numpy array from a 2d numpy array

我有一个二维 numpy 数组:arr= np.array([[2,5,10],[6,2,9]])。现在我想将其转换为 3d numpy 数组,因为我将在 z 轴或第 3 维方向放置相同数量的 1,在那个位置替换元素。例如,代替 2,我们将放置两个 1,所有其他元素将为零。所以我放置了两个 1 和八个 0,因为矩阵的大小为 2*3*10.

可能吗?如果是,我们如何实现?

这可能就是您要问的...

使用numpy.reshape。这需要数组并像这样重塑它:

数组 = numpy.array([[1,4,1], [3, 1, 4]]) numpy.reshape(数组, (array.shape[0], array.shape[1], 1).

数组现在是 numpy.array([[[1,4,1], [3, 1, 4]]])

末尾的 1 基本上是为数组添加一个额外的维度。形状只是指 X-Y-Z 的长度,无论尺寸大小...

请参阅 https://docs.scipy.org/doc/numpy/reference/generated/numpy.reshape.html 处的重塑 numpy 文档。

希望我有所帮助!

你可以尝试这样的事情:

arr3d= np.zeros((arr.shape[0] , arr.shape[1], max(map(max, arr))))
for i in range(arr.shape[0]):
    for j in range(arr.shape[1]):
        print(i,j,arr[i][j])
        for k in range(arr[i][j]):
            arr3d[i,j,k]=1

我知道 3 个循环:\

根据@hpaulj 的建议编辑

像这样使用广播:

>>> x = np.array([[2,5,10],[6,2,9]])
>>> 
>>> (x[..., None] > np.arange(10)).view('i1')
array([[[1, 1, 0, 0, 0, 0, 0, 0, 0, 0],
        [1, 1, 1, 1, 1, 0, 0, 0, 0, 0],
        [1, 1, 1, 1, 1, 1, 1, 1, 1, 1]],

       [[1, 1, 1, 1, 1, 1, 0, 0, 0, 0],
        [1, 1, 0, 0, 0, 0, 0, 0, 0, 0],
        [1, 1, 1, 1, 1, 1, 1, 1, 1, 0]]], dtype=int8)