【发布时间】:2021-05-10 20:11:53
【问题描述】:
我正在尝试剪辑数据集,但出现以下错误:
警告(来自警告模块): 文件“C:\Users\Desktop\py_magn\SnippingMap.py”,第 66 行 res = np.array((x, y, clipMag)).T VisibleDeprecationWarning:不推荐从不规则的嵌套序列(它是具有不同长度或形状的列表或元组或 ndarray 的列表或元组)创建 ndarray。如果您打算这样做,则必须在创建 ndarray 时指定 'dtype=object'
数据集是该区域的磁测量和尺寸 x,y,以 km 为单位。使用此代码,我尝试将区域裁剪为 90x90。 代码是:
root= tk.Tk()
canvas1 = tk.Canvas(root, width = 400, height = 400, bg = 'gray1', relief = 'raised')
canvas1.pack()
def getCSV ():
global df
import_file_path = filedialog.askopenfilename()
df = np.genfromtxt(import_file_path, delimiter='_', missing_values = ' ', filling_values = None)
print (df)
browseButton_CSV = tk.Button(text=" Import CSV File to clip ", command=getCSV, bg='OrangeRed4', fg='black', font=('helvetica', 12, 'bold'))
canvas1.create_window(200, 200, window=browseButton_CSV)
root.mainloop()
x, y, mag = df[:,0], df[:,1], df[:,3]
xmin, ymin = np.min(x), np.min(y)
xc, yc = (xmin + (90/2)), (ymin + (90/2)) # 90 einai to mege8os toy para8yrou
print(xmin,xc)
def clipping( x, y, mag, xc, yc):
xmini, ymini = xc - 45, yc - 45
xmaxi, ymaxi = xc + 45, xc + 45
print(xmaxi, xc)
count=0
for i in x:
if i>=xmini and i<=xmaxi:
count += 1
clipMag = mag[:count]
xn, yn = np.unique(x), np.unique(y)
ind = np.where(xn == xmini)
ind=ind[0][0]
xn = np.linspace(xmini, xmaxi, int(mt.sqrt(len(clipMag))))
yn = np.linspace(ymini, ymaxi, int(mt.sqrt(len(clipMag))))
print(xn, np.shape(xn))
xn, yn = np.meshgrid(xn, yn)
x, y = np.reshape(xn, (1,np.shape(xn)[0]*np.shape(xn)[1])), np.reshape(yn, (1,np.shape(yn)[0]*np.shape(yn)[1]))
res = np.array((x, y, clipMag)).T
root= tk.Tk()
canvas1 = tk.Canvas(root, width = 300, height = 300, bg = 'gray1', relief = 'raised')
canvas1.pack()
def saveCSV ():
global df
export_file_path = filedialog.asksaveasfilename( defaultextension=".csv", filetypes=[("CSV files", '*.csv')])
np.savetxt(export_file_path, res, delimiter='_')
browseButton_CSV = tk.Button(text=" Export filled CSV Data File ", command=saveCSV, bg='OrangeRed4', fg='black', font=('helvetica', 12, 'bold'))
canvas1.create_window(150, 150, window=browseButton_CSV)
root.mainloop()
while True:
if (xc+45)>=np.max(x):
if (yc+45)>=np.max(y):
clipping(x, y, mag, xc, yc)
break
else:
xc = xmin + (90/2)
yc = yc + 45
else:
clipping(x, y, mag, xc, yc)
xc = xc + 45
数据在 .csv 中
【问题讨论】:
-
这是一个警告,而不是错误。您可以按照警告消息 (
dtype=object) 中的说明进行操作以防止它发生。 -
警告这3个数组
(x, y, clipMag)的形状不同,结果数组将是object dtype和1d。您使用.T遵循这一事实表明您期望结果为 2d(或更高)。在savetxt中使用该数组也意味着它应该是二维数字。您需要查看这 3 个数组输入的形状。那里出了点问题。 -
@hpaulj 我计算错了形状,现在形状没问题,但我继续收到相同的警告,而且我无法将它们导出到 csv
-
@Stef 设置 dtype=object,当我尝试导出时出现以下错误:
-
回溯(最近一次调用最后一次):文件“C:\Python\Python38\lib\tkinter_init_.py”,第 1883 行,在 call return self.func(*args) File "C:\Users\Stefanos\Desktop\py_magn\SnippingMap.py", line 77, in saveCSV np.savetxt(export_file_path, res, delimiter='') File “<__array_function_> internals>”,第 5 行,在 savetxt 文件“C:\Programs\Python\Python38\lib\site-packages\numpy\lib\npyio.py”,第 1426 行,在 savetxt 中引发 TypeError( "数组 dtype ('%s') 和 "TypeError 不匹配:数组 dtype ('object') 和格式说明符 ('%.18e') 之间不匹配