数组重塑为 n*n

Array reshape into n*n

我有这段代码,我在其中创建 n * n 个条目并保存输入的数据,但我想保持矩阵的形状,例如,当我创建一个 2*2 时,矩阵应该如下所示保存:[[1 2][3 4]] 但是当我保存它时它看起来像:[1 2 3 4]

如何重塑它?

from tkinter import *
import numpy as np

root = Tk()
root.geometry('800x300')
root.title('PythonExamples.org - Tkinter Example')

global e1
global numm
global my_entry
my_entry= Entry(root)
e1=Entry(root)
e1.place(x=100,y=180)
entries=[]
new_array=[]



def create():
    numm=int(e1.get())
    global my_entry
    for x in range(numm):
        for i in range(numm):
            my_entry = Entry(root)
            my_entry.grid(row=x, column=i)
            entries.append(my_entry)

def save():

    my_array = [int(entry.get()) for entry in entries]
    new_array = np.asarray(my_array)
    print(new_array)



create = Button(root,text='Submit',command=create).place(x=40,y=180)
save = Button(root,text='calc',command=save).place(x=40,y=210)

my_label=Label(root,text='')
root.mainloop()

因为您已经拥有 numpy.array,您可以轻松使用 .reshape

import numpy as np
my_array = [1,2,3,4]
new_array = np.asarray(my_array).reshape((2,2))
print(new_array)

产出

[[1 2]
 [3 4]]

注意:出于演示目的,我使用 2 的固定值,您应该使用 numm 代替,它的检索方式应与 create 函数中的相同。

create函数应修改为:

def create():
  numm = int(e1.get())
  global my_entry
  for x in range(numm):
    row = []
    for i in range(numm):
      my_entry = Entry(root)
      my_entry.grid(row=x, column=i)
      row.append(my_entry)
    entries.append(row)

save函数应修改为:

def save():
  my_array = [[int(el.get()) for el in row] for row in entries]
  new_array = np.asarray(my_array)
  print(new_array)

示例输出为:

[[1 2 3]
 [4 5 6]
 [7 8 9]]