0

我相信我的问题很简单,我只是找不到解决方案,我已经用尽了帮助文档来寻找类似的情况。

我有一个字符串列表,这些字符串是城市名称,我想设置一个函数/表达式,它使用函数列表中的每个名称,然后在表中输出结果。在使用 Mathematica 语言或任何语言写作时,我是一个完全的新手。如果我使用了错误的术语,请多多包涵。这是我到目前为止所写内容的示例。

Module[
 {dateRange, mean, cdd, hdd, station, country, location, population, 
  GDPPerCapita,
  reference = (65 - 32)/1.8, cumList},


 cityLIST = CityData[#, "Name"] & /@ CityData[];


 station =;
 country = CityData[station, "Country"];
 population = CityData[station, "Population"];
 location = CityData[station, "Coordinates"];
 GDPPerCapita = CountryData[country, "GDPPerCapita"];
 dateRange = {{2011, 1, 1}, {2011, 12, 31}, "Day"};
 mean = WeatherData[station, "MeanTemperature", dateRange];
 cdd = Join[Transpose[{mean[[All, 1]]}], 
   Transpose[{Max[# - reference, 0] & /@ mean[[All, 2]]}], 2];
 hdd = Join[Transpose[{mean[[All, 1]]}], 
   Transpose[{Min[# - reference, 0] & /@ mean[[All, 2]]}], 2];
 cumList = Transpose[{Join[
     Transpose[{cdd[[All, 1]]}],
     Transpose[{Drop[FoldList[Plus, 0, cdd[[All, 2]] + hdd[[All, 2]]],
         1]}],
     2]}];


 Grid[station, country, location, population, GDPPerCapita, 
  Last[cumList]]]

cityList 是我要使用的输入列表。我希望 cityList 中的项目成为车站的变量。然后我希望所有这些都输出到一个表中(我上面列出的网格只是一个占位符)。我提前道歉,因为这是一些非常基本的东西,我只是无法找到让它工作的方法。请注意,我使用的是来自 Mathematica 精选数据集的数据...cityData、countryData 和 WeatherData。

如果这里有人对我有一些有用的技巧,我将不胜感激!

4

2 回答 2

0

我没有在这台机器上安装 Mathematica,所以这可能是一个语法变形的答案。

Mathematica 和列表操作的一个有用技巧是首先定义一个对列表元素类型进行操作的函数。在您的情况下,您需要一个功能,例如:

writeARowOfMyTable[city_String]:=...

拥有该功能后,您可以通过多种方式将其应用于城市名称列表。一种方法是为函数赋予属性Listable(检查文档),这意味着调用如

writeARowOfMyTable[listOfCityNames_List]

将返回列表中每个城市的行。另一种方法是使用MapApply再次检查文档。

那只剩下你编写函数了writeARowOfMyTable[]。我从您的一条评论中看到您已经这样做了。那么,我建议的只是将您的代码包装到一个模块中,如下所示:

writeARowOfMyTable[city_String] := Module[{localVariablesGoHere},codeGoesHere]
于 2012-05-22T09:03:47.553 回答
0

这是解决方案的大纲:

为您想要的每个城市收集数据的功能:

GetData[city_List] := {city, 
  CityData[city // First, "Population"], 
  CountryData[city // Last, "GDPPerCapita"], 
  CityData[city, "Coordinates"], 
  WeatherData[First@city, 
     "MeanTemperature", {{2011, 1, 1}, {2011, 12, 31}, "Day"}][[All, 2]] // Mean}

将函数映射到您想要的城市,在本例中为所有可用的城市:

res=GetData/@CityData[];

以下是前 10 个城市的输出:

GetData /@ (CityData[][[1 ;; 10]]) // TableForm

但请注意,您可能必须处理一些丢失的数据。

数学图形

于 2012-05-22T14:59:14.537 回答