首页 > 解决方案 > 错误:操作数无法与形状 (359,) (358,) 一起广播。我已经尝试通过切片来解决这个问题,显然这不起作用

问题描述

我将首先说我对编程知之甚少。我是一名大学生,我的教授基本上把这个作为期末课程论文扔给了我。无论如何,足够的拖延。

该脚本基本上从源自测量样本磁阻的文件中获取数据,它还将 MR 分解为函数的不对称和对称贡献。问题是 AS 和 SY 贡献是 358 个单位长的数组,而 Field 是 359 个,当我尝试拟合该函数时它不起作用,因为它们的长度不同。我想要做的是将我的 Field 数组切片 1,以便它匹配 SY 或 AS 贡献。

我不会把整个代码放在这里,但这里有一些东西: DY 被定义为

DY={}
for i in a:
    DY[i]=pd.read_csv(i,skiprows=16)

然后有一个名为 getcontributions 的函数,它撤回了函数的 SY 和 AS 贡献,它看起来是这样的

antisym000=getContribution(DY[i]['Resistance Ch1 (Ohms)']**(-1),DY[i]['Field (Oe)']/10000)

所以然后我尝试以这种方式绘制和拟合

i='20201006_Te07-1_MR_s017_9T_xy_58deg.dat'
antisymtest=getASContribution(DY[i]['Resistance Ch1 (Ohms)']**(-1),DY[i]['Field (Oe)']/10000)
DY[i]['Field (Oe)'][0:357]
fit=curve_fit(polinomialas, DY[i]['Field (Oe)']/10000,antisymtest['AS'], p0=[0,-1])
ans,cov=fit
fit_a,fit_b=ans

legend="S001, " + str(int(DY[i]['AC Current Ch1 (mA)'][0]*1000))+"uA, " + str(int(round((DY[i]['Temperature (K)'][0]),0))) + "K, " + str(int(round((DY[i]['Frequency Ch1 (Hz)'][0]),0))) + "Hz, "
datalegend="R"

print(ans)
print(i)
plt.plot(DY[i]['Field (Oe)']/10000, polinomialas(DY[i]['Field (Oe)']/10000, fit_a, fit_b))
plt.scatter(DY[i]['Field (Oe)']/10000,antisymtest['AS'],c='green', label='$58^{/circ}$')
plt.xlabel(r'$B$(T)')
plt.ylabel(r'$G (\Omega^{-1}$)')
plt.figtext(0.1,0.9, str(round(fit_a,4)) + "$\Omega$ + " +str(round(fit_b,4)) + "$\Omega/$T $\cdot B$ ")
plt.figtext(0.2,0.3,legend)
plt.savefig(legend + datalegend + '!45!.jpg')

它返回错误“操作数无法与形状(359,)(358,)一起广播”我也尝试过切片

Field=DY[i]['Field (Oe)']
SliceObj=slice(0, 357)
Field[SliceObj]

两者都不起作用,如果我这样做并使用len它仍然会返回 359。这里有什么想法吗?另一种可能性可能是在反对称测试中添加一个额外的项目,但这是一个pd.DataFrame,老实说我不知道​​该怎么做,我宁愿只对字段进行切片。

标签: arraysslice

解决方案


推荐阅读