在for循环中连接numpy数组

问题描述 投票:0回答:1

我将图像分成16个图形来绘制回归,现在我想将它连接成一个图像。

我写了一个for循环来做这个,但我无法理解来自previous questions的建议以及我出错的地方。请有人解释为什么我的输入数组没有相同数量的维度。

from scipy import interpolate


allArrays = np.array([])
for i in range(len(a)):

    fig = plt.figure()
    ax = fig.add_axes([0.,0.,1.,1.])


    if np.amax(a[i]) > 0:
        x, y = np.where(a[i]>0)
        f = interpolate.interp1d(y, x)
        xnew = np.linspace(min(y), max(y), num=40)
        ynew = f(xnew)   
        plt.plot(xnew, ynew, '-')
        plt.ylim(256, 0)
        plt.xlim(0,256)

        fig.canvas.draw()
        X = np.array(fig.canvas.renderer._renderer)
        myArray = color.rgb2gray(X)
        print(myArray.shape)
        allArrays = np.concatenate([allArrays, myArray])
        print(allArrays.shape)

    else:

        plt.xlim(0,256)
        plt.ylim(0,256)
        fig.canvas.draw()
        X = np.array(fig.canvas.renderer._renderer)
        myArray = color.rgb2gray(X)
        print(myArray.shape)
        allArrays = np.concatenate([allArrays, myArray])
        print(allArrays.shape)




    i += 1  

输出:myArray.shape(480,640)

错误消息:所有输入数组必须具有相同数量的维度

我确信这很简单,但我无法弄清楚。谢谢。

python arrays numpy for-loop numpy-ndarray
1个回答
2
投票
In [226]: allArrays = np.array([])                                                   
In [227]: allArrays.shape                                                            
Out[227]: (0,)
In [228]: allArrays.ndim                                                             
Out[228]: 1

In [229]: myArray=np.ones((480,640))                                                 
In [230]: myArray.shape                                                              
Out[230]: (480, 640)
In [231]: myArray.ndim                                                               
Out[231]: 2

1在大多数世界中不等于2!

要在默认轴0上与myArray连接,allArrays必须以np.zeros((0,640), myArray.dtype)开头。在n迭代之后,它将增长到(n*480, 640)

在链接的答案中,新数组都是1d,所以从形状(0,)开始就可以了。但wim's答案更好 - 收集列表中的所有数组,并在最后连接一个。

在循环中重复连接很难正确(你必须理解形状和尺寸),并且比列表追加慢。

© www.soinside.com 2019 - 2024. All rights reserved.