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

时间:2019-03-02 16:48:17

标签: python numpy numpy-ndarray

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

有可能吗?如果是,我们如何实现这一目标?

3 个答案:

答案 0 :(得分:0)

这可能是您要问的...

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

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

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

结尾处的1基本上是为数组增加一个维度。形状只是指X-Y-Z-尺寸物体的长度...

https://docs.scipy.org/doc/numpy/reference/generated/numpy.reshape.html上查看numpy文档以进行重塑。

希望我能帮上忙!

答案 1 :(得分:0)

您可以尝试这样的事情:

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的建议进行编辑

答案 2 :(得分:0)

像这样使用广播:

>>> 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)