设为首页收藏本站

Crossin的编程教室

 找回密码
 立即加入
查看: 5474|回复: 3
打印 上一主题 下一主题

大家来找茬,一个微小的语法错误

[复制链接]

2

主题

0

好友

40

积分

新手上路

Rank: 1

跳转到指定楼层
楼主
发表于 2017-6-28 18:55:37 |只看该作者 |倒序浏览
本帖最后由 方自之 于 2017-6-28 19:00 编辑

各位老铁、Crossin先生好:
        py新手,由于之前都是用fortran做数值模拟较多,有些习惯延续到python.我的问题如下:
1、如代码,我遍历数组p[3000,2000]依然是fortran的习惯是:两个嵌套循环。python中是否建议这样使用,是否有更规范便捷的方法?
2、如代码,我在两个for循环内的if语句,报语法错误,很捉急,没有看出来,请大家帮忙找茬,第35行。
3、由于数据较大,我起初想创建的数组维度是p[240,3000,2000],但报错memory error,自己查了(其实根据字面意思也能猜出来)是数组太大,我无奈改为p[3000,2000]。请问python中该如何解决?
4、代码很简单,都是一元函数运算,如果大家觉得在书写方法上有可以优化的地方,或者有些坏习惯,也请告诉我。
先谢谢各位了
  1. # -*- coding: utf-8 -*-
  2. #本程序用于实现理想台风模拟,参考防灾减灾手册。
  3. import numpy as np
  4. import matplotlib.pyplot as plt
  5. import matplotlib.mlab as mlab
  6. from mpl_toolkits.basemap import Basemap, cm
  7. import math

  8. #参数设定
  9. R_max = 39.0                                 #最大风速半径(km)
  10. pi    = 3.1415926535897932384626             #pai
  11. P_max = 1010.0                               #无穷远处最大气压(hPa)
  12. P_0   = 965.0                                #台风中心气压
  13. V_0   = 25.0                                 #台风移速(km/h)
  14. x_def = 2000
  15. y_def = 3000                                 #区域范围(km)
  16. t_def = 120                                  #模拟时间区间(h)
  17. theta_1 = pi/18.0
  18. theta_2 = pi/7.2                             #流入角度

  19. W_r     = 3.029*(P_max-P_0)**0.644
  20. #Surface Pressure(hPa)
  21. P    = np.zeros([y_def,x_def])
  22. U    = np.zeros([y_def,x_def])
  23. V    = np.zeros([y_def,x_def])

  24. pit_x = 1000
  25. pit_y = 1500
  26. P[pit_y,pit_x] = P_0                           #设置台风中心

  27. for i in range(x_def):
  28.          for j in range(y_def):
  29.                   r=math.sqrt(abs(i-pit_x)**2+abs(j-pit_y)**2)
  30.                   theta_3 = pi/12.0*((r-R_max)/(0.2*R_max)+(pi/18)
  31.                   if r>0 and r<= R_max:                                      
  32.                            A      = -((i-pit_x)*math.sin(theta_1)+(j-pit_y)*math.cos(theta_1))
  33.                            B      =(i-pit_x)*math.cos(theta_1)-(j-pit_y)*math.sin(theta_1)
  34.                            P[j,i] = P_0+(0.25*(P_max-P_0)*(r/R_max)**3)
  35.                            U[j,i] = (R_max/(r-R_max)0+W_r*(r/R_max)**1.5*A/r
  36.                            V[j,i] = (R_max/(r-R_max)*V_0)+W_r*(r/R_max)**0.5*B/r
  37.                   elif(r>R_max and r<R_max*1.2):                         #theta_3                                             
  38.                            P[j,i] =P_max-(0.75*(P_max-P_0)*(R_max/r))
  39.                            A      = -((i-pit_x)*math.sin(theta_3)+(j-pit_y)*math.cos(theta_3))
  40.                            B      =(i-pit_x)*math.cos(theta_3)-(j-pit_y)*math.sin(theta_3)
  41.                            U[j,i] = (R_max/(r-R_max)0+W_r*(r/R_max)**1.5*A/r
  42.                            V[j,i] = (R_max/(r-R_max)*V_0)+W_r*(r/R_max)**0.5*B/r
  43.                   elif(r>=1.2*R_max):                                #theta_2                                    
  44.                            P[j,i] =P_max-(0.75*(P_max-P_0)*(R_max/r))
  45.                            A      = -((i-pit_x)*math.sin(theta_2)+(j-pit_y)*math.cos(theta_2))
  46.                            B      =(i-pit_x)*math.cos(theta_2)-(j-pit_y)*math.sin(theta_2)
  47.                            U[j,i] = (R_max/(r-R_max)0+W_r*(r/R_max)**1.5*A/r
  48.                            V[j,i] = (R_max/(r-R_max)*V_0)+W_r*(r/R_max)**0.5*B/r

  49. #Print Projection
复制代码
我在Corssin编程教室20班群组,QQ:1006535320
回复

使用道具 举报

174

主题

45

好友

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

沙发
发表于 2017-6-28 22:45:24 |只看该作者
你问代码错误的时候请把报错信息也附上。看报错是调试的第一步。

这里是因为34行你少了半个括号。

两层循环遍历没问题。

数组过大建议分段处理,或者配合循环动态处理,一般都可以通过代码来解决。
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

2

主题

0

好友

40

积分

新手上路

Rank: 1

板凳
发表于 2017-6-29 08:13:26 |只看该作者
crossin先生 发表于 2017-6-28 22:45
你问代码错误的时候请把报错信息也附上。看报错是调试的第一步。

这里是因为34行你少了半个括号。

谢谢Crossin先生!以后我会注意提问的完整性,方便老司机带路。这次错误如图,不是那种准确的报错,所以直接口述了。现问题已解决。绝大多数数值计算问题都可以用numpy解决,我知道这只是python的冰山一角,也不是你的授课重点,但你课程中的遍历文件夹,搜索内容等教程对我十分有用,使我在处理大量数据时更加自动化。PS. 最近闲时在玩你推荐的jieba中文分词器。谢谢你提供的所有平台和资源,我很受用。


微信截图_20170629080344.png (28.21 KB, 下载次数: 261)

本次报错(现已解决)

本次报错(现已解决)

我在Corssin编程教室20班群组,QQ:1006535320
回复

使用道具 举报

174

主题

45

好友

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

地板
发表于 2017-6-29 23:26:08 |只看该作者
方自之 发表于 2017-6-29 08:13
谢谢Crossin先生!以后我会注意提问的完整性,方便老司机带路。这次错误如图,不是那种准确的报错,所以 ...

#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即加入

QQ|手机版|Archiver|Crossin的编程教室 ( 苏ICP备15063769号  

GMT+8, 2024-4-26 23:37 , Processed in 0.029542 second(s), 24 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部