在我作为博士生的日常工作中,我做地质建模.在业余时间(主要是为了好玩),我正在学习Python并尝试编写一个简单的程序来查看3D地理细胞模型.
地质模型http://img710.imageshack.us/img710/6503/sgems.png geo model2 http://img638.imageshack.us/img638/529/1sblockmodel.jpg
地理细胞模型只是一个3D网格,其中每个网格单元都有一些值(如右图所示).所以,我希望我的观察者能够像右侧的图片一样显示3D网格模型.同样,我希望它能够在x,y和z方向上显示模型的横截面(如左图所示).
我还希望模型能够围绕所有三个轴旋转并放大和缩小.
我做了一些初步调查(主要是在这里),似乎VisVis和VTK是两个潜在的选择.我试图使用wxPython作为主GUI,看起来这两个选项将与wxPython一起使用,据我所知.
问题:
当我说我认为VisVis和VTK可以满足我的需求时,我是对的吗?一个比另一个好吗?
这两个选项中哪一个最容易实现?
还有其他选择我还应该考虑吗?
请记住,我是Python的新手,也是wxPython的新手.
我想有一个Fortran写语句格式化依赖于某些变量.例如,我可以写:
write(*,'(3f15.3,3f9.2)') x,y,z,(var(i),i=1,nvari)
Run Code Online (Sandbox Code Playgroud)
哪里nvari = 3.但是,如果在某些情况下,我实际上有4个变量(即nvari = 4).我想写这样的东西:
write(*,'(3f15.3,nvari(f9.2))') x,y,z,(var(i),i=1,nvari)
Run Code Online (Sandbox Code Playgroud)
现在,nvari可以是任何东西,输出将按我喜欢的方式工作.我怎样才能做出类似这样的工作?
我有一些代码:
import matplotlib.pyplot as plt
def print_fractures(fractures):
xpairs = []
ypairs = []
plt.figure(2)
plt.subplot(212)
for i in range(len(fractures)):
xends = [fractures[i][1][0], fractures[i][2][0]]
yends = [fractures[i][1][1], fractures[i][2][1]]
xpairs.append(xends)
ypairs.append(yends)
for xends,yends in zip(xpairs,ypairs):
plt.plot(xends, yends, 'b-', alpha=0.4)
plt.show()
def histogram(spacings):
plt.figure(1)
plt.subplot(211)
plt.hist(spacings, 100)
plt.xlabel('Spacing (m)', fontsize=15)
plt.ylabel('Frequency (count)', fontsize=15)
plt.show()
histogram(spacings)
print_fractures(fractures)
Run Code Online (Sandbox Code Playgroud)
此代码将生成以下输出:

我的问题是:
1)为什么要创建两个单独的数字?我认为subplot命令会将它们组合成一个图形.我以为它可能是多个plt.show()命令,但我尝试将这些命令注释掉,只从我的函数外部调用一次,我仍然有两个窗口.
2)如何将它们正确地组合成1个数字?另外,我希望图2的轴具有相同的比例(即,x轴上的400米与y轴上的400米的长度相同).同样,我也想垂直拉伸直方图 - 这是如何实现的?
我使用mahotas将图片加载到一个numpy数组中.
import mahotas
img = mahotas.imread('test.jpg')
Run Code Online (Sandbox Code Playgroud)
每个像素img由RGB值数组表示:
img[1,1] = [254, 200, 189]
Run Code Online (Sandbox Code Playgroud)
我在一个轴上制作了R值的3D散点图,在第二个轴上制作了G值,在第三个轴上制作了B值.这没问题:
fig = plt.figure()
ax = fig.add_subplot(111, projection = '3d')
for i in range(1,img.shape[1]+1):
xs = img[i,1][0]
ys = img[i,1][1]
zs = img[i,1][2]
ax.scatter(xs, ys, zs, c='0.5', marker='o')
ax.set_xlabel('X Label')
ax.set_ylabel('Y Label')
ax.set_zlabel('Z Label')
plt.show()
Run Code Online (Sandbox Code Playgroud)
(我只是暂时绘制图像的第一列).
如何根据每个图像像素的颜色为每个散点图点着色?即我想我想用RGB值对点进行着色,但我不确定这是否可行?
我已经安装了Enthought的EPD(Windows 7为64位).
我正在尝试使用Yahoo的API绘制历史股票报价数据.我试图使用的所有代码都在这篇博客文章中:http: //www.traineetrader.com/importing-stock-data-from-yahoo-using-python/
ystockquote.py文件工作正常.
但是用于绘制谷歌历史股票报价的第二个脚本对我来说并不适用.这是代码(来自网站):
import ystockquote
# Get Quotes 01/01/2006 - 01/01/2009
GOOG = ystockquote.get_historical_prices('GOOG', '20060101', '20090101')
# Create empty lists, quick and dirty
GOOGOpen = [ ]
GOOGClose = [ ]
GOOGDate = [ ]
GOOGHigh = [ ]
GOOGLow = [ ]
GOOGAdj = [ ]
GOOGVolume = [ ]
# Populate lists from downloaded data
for i in range(1, 755):
GOOGDate.append(GOOG[i][0])
GOOGOpen.append(GOOG[i][1])
GOOGHigh.append(GOOG[i][2])
GOOGLow.append(GOOG[i][3])
GOOGClose.append(GOOG[i][4])
GOOGVolume.append(GOOG[i][5])
GOOGAdj.append(GOOG[i][6])
plot(GOOGAdj)
title("Google Adjusted Close")
ylabel(r"GOOG Closing …Run Code Online (Sandbox Code Playgroud) 我有一个字符串:
<font face="ARIAL,HELVETICA" size="-2">
JUL 28 </font>
Run Code Online (Sandbox Code Playgroud)
(它输出超过两行,因此必须有一个\n.
我希望提取<font></font>标签之间的字符串.在这种情况下,它是JUL 28,但它可能是另一个日期或其他数字.
1)从字体标签之间提取值的最佳方法是什么?我想我可以在之间抽取一切">和</.
编辑:删除第二个问题.
所以我有一些像这样的行的文本文件:
STRT .M -9.0: START DEPTH
Run Code Online (Sandbox Code Playgroud)
我希望检测到负数并将其替换为0.1.
我可以通过寻找' - '来检测负数
text.count('-')
Run Code Online (Sandbox Code Playgroud)
如果text.count(' - ')> 0,则为负数.
我的问题是:如何用数字0.1替换字符串中的'-9.0'?最终,我想输出:
STRT .M 0.1: START DEPTH
Run Code Online (Sandbox Code Playgroud) 我有一个数据框,其中某些单元格具有类似“ <0.5”的字符串。
我想遍历整个数据帧,对于包含小于号的任何单元格,我想用0.0替换整个单元格。
因此,例如<0.4变为0.0
编辑以添加一些代码:
df = pd.read_csv(infl)
for i in range(df.shape[0]):
for j in range(df.shape[1]):
if "<" in df.ix[i,j]:
df.ix[i,j] = 0.0
Run Code Online (Sandbox Code Playgroud)
产生错误:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\00Working\81_WinPython_32bit_2.7.5.3\python-2.7.5\lib\site-packages\spyderlib\widgets\externalshell\sitecustomize.py", line 538, in runfile
execfile(filename, namespace)
File "Z:/working/MINING/2015/01_read_data.py", line 24, in <module>
if "<" in df.ix[i,j]:
TypeError: argument of type 'numpy.int64' is not iterable
Run Code Online (Sandbox Code Playgroud)
此代码也不起作用:
df = pd.read_csv(infl)
for i in range(df.shape[0]):
for j in range(df.shape[1]):
if '<' in df.iloc[i][j]:
df[i,j] = 0.0 …Run Code Online (Sandbox Code Playgroud) 我在将一些csv数据读入pandas数据框时遇到了一些麻烦.这是我的数据:
C1, C2, C3, C4, C5,
5.0010254, 12, 0.37, 1.2672, 2039.5,
5.0499756, 12, 0.37, 1.2672, 2039.5,
5.1000244, 12, 0.37, 1.2672, 2039.5,
5.1500122, 12, 0.37, 1.2672, 2039.5,
5.2, 12, 0.37, 1.2672, 2039.5,
5.2499878, 12, 0.37, 1.2672, 2039.5,
5.2999756, 12, 0.37, 1.2672, 2039.5,
5.3500244, 12, 0.37, 1.2672, 2039.5,
5.4000122, 12, 0.37, 1.2672, 2039.5,
5.45, 12, 0.37, 1.2672, 2039.5,
5.4999878, 12, 0.37, 1.2672, 2039.5,
Run Code Online (Sandbox Code Playgroud)
如您所见,数据以逗号分隔,但在逗号后面还有很多空格.我不知道这是不是什么给我带来麻烦,但如果我说:
infl = pd.read_csv('filename.txt', sep=",", header=1, na_values=["-999"])
print infl['C2']
Run Code Online (Sandbox Code Playgroud)
我收到错误:
KeyError: 'C2'
Run Code Online (Sandbox Code Playgroud)
我已经尝试了read_csv命令,有没有明确定义分隔符而没有成功.任何帮助表示赞赏!
我正在完成Rails教程的第一章.我把first_app推到了heroku.起初我得到了sqlite3错误(我认为).但是,我编辑了gemfile并再次将其推送到heroku.但是,我没有得到与以下相同的页面:http://railstutorial.org/ruby-on-rails-tutorial-book#sec:1.4.3(我认为它应该看起来像1.4节中的图1.11. 3)
相反,我得到了这个:http://blooming-samurai-546.heroku.com/
它只是说:Heroku | 欢迎使用您的新应用!如果需要帮助部署,请参阅文档.
我做错了对吗?有什么想法吗?