我正在尝试从数组中构造一个矩阵对象。该数组的长度为25,我想要做的是构造一个5x5矩阵。我使用了numpy.asmatrix()和矩阵构造函数,但两者都产生了一个长度为1的矩阵。所以,基本上发生的是数组的所有元素都被认为是一个元组并插入到新创建的矩阵中。有什么方法可以解决这个问题吗?
编辑:当我写“数组”时,我天真地意味着一个香草python列表,而不是一个真正的numpy.array,这将使事情变得更加简单。我的错误。
答案 0 :(得分:4)
您可能只想要.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]])
答案 1 :(得分:1)
您可以使用每个方向有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这样的特定实现,请指出您的问题。
答案 2 :(得分:0)
如果您有一个长度为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的情况下使用@
)进行矩阵乘法而不是*
。
矩阵类倾向于在代码中引入错误,除非您非常小心。
答案 3 :(得分:0)
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))
这应该有助于创建矩阵类型数组 使用自定义用户输入