Python 索引器错误:使用从mathematica导出的表时,列表索引超出范围
当我试图用Mathematica Wolfram提供的文本文件,使用Matplotlib绘制一些数据时,我遇到了一个问题。 代码如下:Python 索引器错误:使用从mathematica导出的表时,列表索引超出范围,python,matplotlib,wolfram-mathematica,Python,Matplotlib,Wolfram Mathematica,当我试图用Mathematica Wolfram提供的文本文件,使用Matplotlib绘制一些数据时,我遇到了一个问题。 代码如下: import numpy as np import matplotlib.cm as cm import matplotlib.pyplot as plt import matplotlib.mlab as mlab import matplotlib.artist as pltart params = {'font.size': 11, 'axes.lab
import numpy as np
import matplotlib.cm as cm
import matplotlib.pyplot as plt
import matplotlib.mlab as mlab
import matplotlib.artist as pltart
params = {'font.size': 11,
'axes.labelsize' : 18, 'axes.titlesize' : 18,
'xtick.labelsize' : 18, 'ytick.labelsize' : 18,
'figure.figsize' : [6.0,4.4],
'figure.subplot.left' : 0.13, 'figure.subplot.right' : 0.999,
'figure.subplot.bottom' : 0.16, 'figure.subplot.top' : 0.999}
plt.rcParams.update(params)
x=np.arange(7,24,0.1)
M3=0.47e-3*x**3
plt.figure()
RhoS,MS,RS,=np.loadtxt('Static.pnr',usecols=(0,1,2),unpack=True)
# MtotVsRtot plot
plt.plot(RS,MS,'k-',color='red',linewidth=2.0)
plt.plot(x,M3,'k-.',color='grey',linewidth=1.5)
plt.xlabel(r'$R_{\rm eq}\,(\rm km)$',fontsize=20)
plt.ylabel(r'$M/M_{\odot}$', fontsize=20)
#plt.show()
plt.savefig('MvsR_L&P_GM1.eps')
#exit()
文本文件通过以下命令从mathematica获得:
Static = Table[{KepSeq[[i, 1]],
KepSeq[[i, 2]], KepSeq[[i, 3]]}, {i, 1,
Length[KepSeq]}] // TableForm
Export["Static", Static, "Table"]
其中,KepSeq[[i,j]]
只是一个值矩阵
看起来,即使Mathematica正确地生成了一个三列文本文件,Matplotlib也无法识别这些列,事实上,使用手工构建的文本文件进行测试,我没有遇到任何问题
当然,使用.txt文件并不能解决错误
与标题一样,错误是:索引器错误:列表索引超出范围。
编辑:
放在一边,只需执行Static=KepSeq[[All,1;;3]]。你有没有研究过这个文件,以确保它都是数字
我注意到mathematica创建的表只由数字组成。但是,“复制并粘贴”到一个空的.txt文件中,会显示许多隐藏字符,例如偏旁字符、逗号和其他字符:
\!\(\*
TagBox[GridBox[{
{"19.30736436824425`", "0.49704178850444225`"},
你知道怎么摆脱它吗?同时,(显然不令人满意的)解决方案是复制并通过,然后手动删除多余的字符。搁置,只需执行
Static=KepSeq[[All,1;;3]
。您是否研究过该文件以确保其全部为数字?再次查看,您正在将静态
赋值给表格
格式化表达式。摆脱TableForm
应该可以解决问题。(无论如何,在TableForm
后面加一个分号是完全没有意义的,它说的是“很好地格式化它,但不要显示它”。)正是,正如我所说的,去掉TableForm
,或者如果你想看到它,也可以这样做:(Static=KepSeq[[All,1;;3]])//TableForm
请注意括号,它会导致在格式化之前为Static
分配数字。是的,很抱歉,我仍然必须完全理解如何编辑和回答。无论如何,我编辑了主要文本,试图回答您的疑问。此外,请坚持您的原始导出
,而不是复制粘贴。只需执行Static=KepSeq[[All,1;;3]]
。您是否研究过该文件以确保其全部为数字?再次查看,您正在将静态
赋值给表格
格式化表达式。摆脱TableForm
应该可以解决问题。(无论如何,在TableForm
后面加一个分号是完全没有意义的,它说的是“很好地格式化它,但不要显示它”。)正是,正如我所说的,去掉TableForm
,或者如果你想看到它,也可以这样做:(Static=KepSeq[[All,1;;3]])//TableForm
请注意括号,它会导致在格式化之前为Static
分配数字。是的,很抱歉,我仍然必须完全理解如何编辑和回答。无论如何,我编辑了正文,试图回答您的疑问。另外,请坚持原始的导出,而不是复制粘贴。
{"11.327870685578393`", "2.199907624212163`"}
},
GridBoxAlignment->{
"Columns" -> {{Left}}, "ColumnsIndexed" -> {},
"Rows" -> {{Baseline}}, "RowsIndexed" -> {}},
GridBoxSpacings->{"Columns" -> {
Offset[0.27999999999999997`], {
Offset[2.0999999999999996`]},
Offset[0.27999999999999997`]}, "ColumnsIndexed" -> {}, "Rows" -> {
Offset[0.2], {
Offset[0.4]},
Offset[0.2]}, "RowsIndexed" -> {}}],
Function[BoxForm`e$,
TableForm[BoxForm`e$]]]\)