簡體   English   中英

從基本2D數組構造3D數組-Numpy

[英]Constructing 3D array from base 2D array - Numpy

我正在嘗試使用Numpy在python中創建3D數組,並將2D數組乘以3維。 我在Numpy多維數組中是一個新手,基本上我在這里缺少重要的東西。

在此示例中,我嘗試通過復制20次來使用基本2D數組(10x10)制作10x10x20 3D數組。

我的起始二維數組:

a = zeros(10,10)
for i in range(0,9):
    a[i+1, i] = 1

我試圖創建3D數組的內容:

b = zeros(20)
for i in range(0,19):
    b[i]=a

這種方法可能很愚蠢。 那么從基礎2D陣列構造3D陣列的正確方法是什么?

干杯。

編輯好吧,由於我的R背景,我做錯了事情。

我終於做到了

b = zeros(20*10*10)
b = b.reshape((20,10,10))
for i in b:
    for m in range(0, 9):
        i[m+1, m] = 1

還有其他方法可以做到這一點嗎?

有很多方法可以構造多維數組。

如果要從給定的2D數組構造3D數組,則可以執行以下操作

import numpy

# just some 2D arrays with shape (10,20)
a1 = numpy.ones((10,20))
a2 = 2* numpy.ones((10,20))
a3 = 3* numpy.ones((10,20))

# creating 3D array with shape (3,10,20)
b = numpy.array((a1,a2,a3))

根據情況,還有其他更快的方法。 但是,只要您使用內置的構造函數而不是循環,您的立場就會很快。

對於您在Edit的具體示例,我將使用numpy.tri

c = numpy.zeros((20,10,10))
c[:] = numpy.tri(10,10,-1) - numpy.tri(10,10,-2)

遇到類似的問題...

我需要像這樣將2D數組修改為3D數組: (y, x) -> (y, x, 3) 這是此問題的幾個解決方案。

解決方案1

使用python工具集

array_3d = numpy.zeros(list(array_2d.shape) + [3], 'f')
for z in range(3):
    array_3d[:, :, z] = array_2d.copy()

解決方案2

使用numpy工具集

array_3d = numpy.stack([array_2d.copy(), ]*3, axis=2)

這就是我想出的。 如果有人知道numpy提供更好的解決方案,我很樂意看到它! 這可行,但是我懷疑有一種更好的性能方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM