如何在python中添加numpy数组的第k + 1个元素?

时间:2016-04-20 17:56:35

标签: python numpy

在Matlab中,我有这段代码:

h{1} = zeros(16,16);
for i = 1:9
    for j = 1:13
        h{1}(i+3,j+1) = ht1(i,j);
    end
end

for k=1:11
    ag = 15*k;
    h{k+1} = imrotate(h{1},ag,'bicubic');
end

但是我很难将它移植到Python,这是我尝试过的:

h= np.zeros((16,16))
for i in range(0, 9):
    for j in range(0, 13):
        h[i+3, j+1] = ht1[i, j]

h = [scipy.misc.imrotate(h, 15*i, 'bicubic') for i in range(0, 11)]

但我肯定知道这一行:

h = [scipy.misc.imrotate(h, 15*i, 'bicubic') for i in range(0, 11)]
从上面的代码

覆盖我创建的numpy数组并在之前添加元素。我如何在Matlab代码中完成?

2 个答案:

答案 0 :(得分:1)

首先,您的代码创建的内容没有任何问题,最终结果是数组列表,就像Matlab代码创建矩阵的单元格数组一样。

如果您想要更直接的翻译,可以试试这个:

h = [np.zeros((16,16))]  # this creates h as a one element list
for i in range(0, 9):
    for j in range(0, 13):
        h[0][i+3, j+1] = ht1[i, j]  # now we index a lot like before

for i in range(1, 12):
    h.append(scipy.misc.imrotate(h[0], 15*i, 'bicubic')

为了清楚起见,我将重复您使用原始代码获得正确的结果,即使您正在重复使用名称h作为最终结果。由于旋转0度会产生相同的图像,因此您不会丢失任何内容。

答案 1 :(得分:0)

Matlab单元格数组的Python等效项可以是Python字典或列表,因此您需要其中一个而不是仅包含一个矩阵的h变量。

此示例使用列表。

h = [ np.zeros((16,16)) ]
for i in range(0, 9):
    for j in range(0, 13):
        h[0][i+3, j+1] = ht1[i, j] # not sure what 'ht1' is here... 

h.extend(scipy.misc.imrotate(h[0], 15*i, 'bicubic')  for i in range(1, 12))

另外,请注意Python范围最后是非包容性的,range(0, x)可以简化为range(x)