【问题标题】:Convert a 1D array to a 2D array in numpy在numpy中将一维数组转换为二维数组
【发布时间】:2012-09-16 12:37:35
【问题描述】:

我想通过指定二维数组的列数将一维数组转换为二维数组。像这样工作的东西:

> import numpy as np
> A = np.array([1,2,3,4,5,6])
> B = vec2matrix(A,ncol=2)
> B
array([[1, 2],
       [3, 4],
       [5, 6]])

numpy 是否有一个像我虚构的函数“vec2matrix”一样工作的函数? (我知道您可以像二维数组一样索引一维数组,但这不是我拥有的代码中的选项 - 我需要进行这种转换。)

【问题讨论】:

    标签: python arrays matrix numpy multidimensional-array


    【解决方案1】:

    你想reshape数组。

    B = np.reshape(A, (-1, 2))
    

    -1 从输入数组的大小推断出新维度的大小。

    【讨论】:

      【解决方案2】:

      你有两个选择:

      • 如果你不再想要原来的形状,最简单的方法就是给数组分配一个新的形状

        a.shape = (a.size//ncols, ncols)
        

        您可以通过-1 切换a.size//ncols 以自动计算正确的形状。确保a.shape[0]*a.shape[1]=a.size,否则你会遇到一些问题。

      • 您可以使用np.reshape 函数获得一个新数组,其工作原理与上面介绍的版本基本相似

        new = np.reshape(a, (-1, ncols))
        

        如果可能,new 将只是初始数组a 的视图,这意味着数据是共享的。但是,在某些情况下,new 数组将改为 acopy。请注意,np.reshape 还接受一个可选关键字 order,它允许您从行优先 C 顺序切换到列优先 Fortran 顺序。 np.reshapea.reshape 方法的函数版本。

      如果您不能遵守a.shape[0]*a.shape[1]=a.size 的要求,您将不得不创建一个新数组。可以使用np.resize函数和np.reshape混合使用,比如

      >>> a =np.arange(9)
      >>> np.resize(a, 10).reshape(5,2)
      

      【讨论】:

        【解决方案3】:

        尝试类似:

        B = np.reshape(A,(-1,ncols))
        

        您需要确保可以将数组中的元素数除以ncols。您还可以使用order 关键字来调整数字被拉入B 的顺序。

        【讨论】:

          【解决方案4】:

          如果您的唯一目的是将一维数组 X 转换为二维数组,请执行以下操作:

          X = np.reshape(X,(1, X.size))
          

          【讨论】:

            【解决方案5】:

            通过添加新轴将一维数组转换为二维数组。

            a=np.array([10,20,30,40,50,60])
            
            b=a[:,np.newaxis]--it will convert it to two dimension.
            

            【讨论】:

              【解决方案6】:

              还有一个简单的方法,我们可以用不同的方式使用 reshape 函数:

              A_reshape = A.reshape(No_of_rows, No_of_columns)
              

              【讨论】:

              • A = A.reshape(A.shape[0], 1)
              【解决方案7】:

              您可以使用 numpy 包中的flatten()

              import numpy as np
              a = np.array([[1, 2],
                     [3, 4],
                     [5, 6]])
              a_flat = a.flatten()
              print(f"original array: {a} \nflattened array = {a_flat}")
              

              输出:

              original array: [[1 2]
               [3 4]
               [5 6]] 
              flattened array = [1 2 3 4 5 6]
              

              【讨论】:

              【解决方案8】:
              some_array.shape = (1,)+some_array.shape
              

              或者买一个新的

              another_array = numpy.reshape(some_array, (1,)+some_array.shape)
              

              这将使尺寸+1,等于在最外面添加一个括号

              【讨论】:

                【解决方案9】:
                import numpy as np
                array = np.arange(8) 
                print("Original array : \n", array)
                array = np.arange(8).reshape(2, 4)
                print("New array : \n", array)
                

                【讨论】:

                • 最好在代码中包含一些解释。
                • 你能解释一下你现在的答案与以前的答案以及上面的其他答案有何不同,也使用 np.reshape?
                【解决方案10】:

                不使用 Numpy 将一维数组转换为二维数组。

                l = [i for i in range(1,21)]
                part = 3
                new = []
                start, end = 0, part
                
                
                while end <= len(l):
                    temp = []
                    for i in range(start, end):
                        temp.append(l[i])
                    new.append(temp)
                    start += part
                    end += part
                print("new values:  ", new)
                
                
                # for uneven cases
                temp = []
                while start < len(l):
                    temp.append(l[start])
                    start += 1
                    new.append(temp)
                print("new values for uneven cases:   ", new)
                

                【讨论】:

                  猜你喜欢
                  • 2023-02-03
                  • 2019-10-21
                  • 2016-02-18
                  • 2018-02-19
                  • 2020-03-26
                  相关资源
                  最近更新 更多