【发布时间】:2017-11-03 12:39:59
【问题描述】:
我有一个 3-d 数组 G,其大小在循环中发生变化。在Matlab中,我首先创建了一个空数组G = [];
然后我从另一个大小为 256x256 的现有数组 D 创建 G 的第一个元素,在 matlab 中这样做很简单,如下所示
G(:,:,1) = D(:,:)
如何在 Python 中做同样的事情?
【问题讨论】:
标签: python arrays matlab assign
我有一个 3-d 数组 G,其大小在循环中发生变化。在Matlab中,我首先创建了一个空数组G = [];
然后我从另一个大小为 256x256 的现有数组 D 创建 G 的第一个元素,在 matlab 中这样做很简单,如下所示
G(:,:,1) = D(:,:)
如何在 Python 中做同样的事情?
【问题讨论】:
标签: python arrays matlab assign
考虑预分配。
在 python 的 numpy 中,你可以像这样预分配:
G = np.zeros([depth, height, width])
然后你可以sliceG 以类似于matlab的方式,并在其中替换矩阵。如果您仍然想要一个大小可变的数组,您可以使用二维数组创建一个列表,然后将其转换为 np.array,如下所示:
G = list()
for i in range(N):
G.append(D)
G = np.array(G)
【讨论】:
一个空的 3d 数组应该是这样的
n = 256
threeD = [[[0 for k in xrange(n)] for j in xrange(n)] for i in xrange(n)]
或者,如果您只想要一个 256x256 2d 数组在较大的 3d 数组中(我认为您在 Matlab 中尝试这样做)
threeD = [[[0 for k in xrange(n)] for j in xrange(n)]]
其中 n 是每个“维度”的大小。
它会给你一个充满 0 的数组,或者你可以用 None 替换 0,如果这更适合作为一个空数组
另外,它在 python 中并不是真正的“数组”,它是一个“列表”
【讨论】:
你可以使用
G[:,:,1]=D[:,:]
例子:
>>> G=np.zeros((2,2,2))
>>> D=np.ones((2,2))
>>> G[:,:,1]=D[:,:]
>>> G
array([[[ 0., 1.],
[ 0., 1.]],
[[ 0., 1.],
[ 0., 1.]]])
【讨论】: