0

作为我的问题的序言:我对堆栈溢出很陌生,对 Python 也比较陌生。

我正在建立敏感性分析。我正在处理 0.1 - 1 范围内的 40 个参数。我的分析需要同时将这些参数更改 +-0.1 大约 ~500 次。然后将这些值输入到 ArcGIS 工具中。所以,对于 40 个参数,我需要 500 组随机值。然后将这些参数值与工具的输出进行比较,以查看模型对哪些参数最敏感。我设置了一个 Excel 表,每次打开时都会随机计算这些值,但问题是它们需要采用 .dbf 格式才能被 ArcGIS 工具读取。

我已经设置了一个 while 循环(开始 10 次迭代,但需要大约 500 次)并尝试了两种不同的方法,希望我可以自动化调用 .xls 以生成随机数,然后将其导出的过程到.dbf。

第一个,arcpy.CopyRows_management 正确导出到 .dbf。问题是每次迭代的输出都完全相同,而不是具有 0.1、0.2、0.3 等值,而是包含 0.22、0.37、0.68 等值。即使那是在 .xls 中的公式中指定。

我也尝试了 arcpy.TabletoTable_conversion 但那是抛出 ERROR 999999: Error execution function。

我愿意接受各种建议。也许有一种更简单的方法可以在 Python 中随机抽样并将结果导出到 .dbf。这不需要使用 arcpy 来完成,但这就是我真正使用过的全部。我非常感谢提供的任何帮助!谢谢你的时间。

i = 0
while i < 10:
    # Set run specific variables
    lulc = "D:\\SARuns\\lulc_nosoils_rand.xls\\lulc_nosoils$"
    folder = "D:\\SARuns"

    print "Reading lulc"

    newlulc = "D:\\SARuns\\lulc_nosoils_rand"+str(i)+".dbf"

    print "Reading newlulc"

    # Copy rows is copying it to a dbf, but the values inside 
    # are the same for each run. And, none are correct.    
    arcpy.CopyRows_management(lulc, newlulc)

    # Table to table should work. But isn't.    
    # arcpy.TableToTable_conversion(lulc, folder, newlulc)

    print "Converting table"    
    i+= 1
4

1 回答 1

1

在 Excel 中计算值时,您总是会得到所有小数。即使您将数字格式指定为 1 个小数,整数仍然存在。所以我认为这就是为什么你没有得到带一位小数的“确切数字”。应用舍入函数仅获得一位小数。

复制行只会从您的 dbf 中复制值,它不会打开 Excel 来调用该公式来计算新的随机值。

因此,您要么必须在 Python 中计算随机值并创建 dBase 输出,要么需要实际打开一个 Excel 实例——它应该触发你的新随机值——并将该 Excel 表保存为 dBase。

也许使用CalculateField_management用您的值填充 ArcMap 表并将该数据导出到 dBase 会起作用,即使用以下内容:

     arcpy.TableToDBASE_conversion(tableName, outPath)
于 2014-10-06T14:33:00.577 回答