【问题标题】:Create a matrix out of an array从数组中创建一个矩阵
【发布时间】:2015-11-09 15:24:39
【问题描述】:

我正在尝试从数组中构造一个矩阵对象。该数组的长度为 25,我想做的是从中构造一个 5x5 矩阵。我已经使用了 numpy.asmatrix() 和矩阵构造函数,但都产生了一个长度为 1 的矩阵。所以,基本上发生的是数组的所有元素都被认为是一个元组并插入到新创建的矩阵中.有没有办法解决这个问题,所以我可以完成我想要的?

编辑:当我写“数组”时,我天真地指的是一个普通的 python 列表,而不是一个实际的 numpy.array,这会使事情变得更简单。我的一个错误。

【问题讨论】:

标签: python arrays numpy matrix


【解决方案1】:

你可能只想.reshape()

In [2]: a = np.arange(25)

In [3]: a
Out[3]:
array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16,
       17, 18, 19, 20, 21, 22, 23, 24])

In [4]: a.reshape(5,5)
Out[4]:
array([[ 0,  1,  2,  3,  4],
       [ 5,  6,  7,  8,  9],
       [10, 11, 12, 13, 14],
       [15, 16, 17, 18, 19],
       [20, 21, 22, 23, 24]])

如果你需要它的话,你也可以将它转换成np.matrix

In [5]: np.matrix(a.reshape(5,5))
Out[5]:
matrix([[ 0,  1,  2,  3,  4],
        [ 5,  6,  7,  8,  9],
        [10, 11, 12, 13, 14],
        [15, 16, 17, 18, 19],
        [20, 21, 22, 23, 24]])

编辑:如果你有一个列表开始,它仍然不是太糟糕:

In [16]: l = range(25)

In [17]: np.matrix(np.reshape(l, (5,5)))
Out[17]:
matrix([[ 0,  1,  2,  3,  4],
        [ 5,  6,  7,  8,  9],
        [10, 11, 12, 13, 14],
        [15, 16, 17, 18, 19],
        [20, 21, 22, 23, 24]])

【讨论】:

  • 我尝试了 reshape() 并得到了下面的错误,这让我很困惑:ValueError:新数组的总大小必须保持不变
  • 这意味着对于您对arr.reshape(x, y) 的调用,x * y 不等于len(arr)
  • 没关系,我的错误。问题是我试图从列表中创建一个矩阵(而不是一个实际的 numpy 数组)。我会编辑帖子。你的回答很好。干杯。
  • @AutomEng:如果他的回答很好,你应该接受这个答案
【解决方案2】:

您可以使用每个方向有 5 个空格的二维数组来简单地模拟一个矩阵:

>>>Matrix =  [[0 for x in range(5)] for x in range(5)]

并通过以下方式访问元素:

>>>Matrix[0][0]=1

要测试输出,打印它:

>>>Matrix
[[1, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]]

如果您需要像 numpy 这样的特定实现,请说明您的问题。

【讨论】:

    【解决方案3】:
    row = int(input("Enter the number of Rows: \n"))
    col = int(input("Enter the number of Column: \n"))
    print("Enter how many elements you want: \n")
    num1 = row * col
    print('Enter your elements in array: ')
    for i in range(num1):
        n = int(input("Element " + str(i + 1) + " : "))
        num_array1.append(n)
    arr = np.array([num_array1])
    newarr = arr.reshape(row, col)
    print(newarr)
    print(type(newarr))
    

    这应该有助于创建矩阵类型数组 使用自定义用户输入

    【讨论】:

      【解决方案4】:

      如果您有一个长度为 25 的数组,您可以使用 reshape() 将其转换为 5x5 数组。

      A = np.arange(25)  # length 25
      B = A.reshape(5, 5)  # 5x5 array
      

      但是,您必须确保数组中的元素最终位于新形成的 5x5 数组中的正确位置。

      虽然有一个numpy.matrix 类,但我建议你忘记它,只使用numpy.ndarray。唯一的区别是您必须使用np.dot(或@,如果是较新的Python/Numpy)进行矩阵乘法而不是*。 除非您非常小心,否则矩阵类倾向于在代码中引入错误。

      【讨论】:

        猜你喜欢
        • 2023-04-01
        • 1970-01-01
        • 1970-01-01
        • 2017-03-13
        • 2021-01-09
        • 1970-01-01
        • 2023-04-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多