genfromtxt中的数组是否作为序列传递?

2024-06-27 20:18:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我在形状中列出了坐标及其各自的误差值:

# Graph from standard correlation, page 1
1.197   0.1838  -0.03504    0.07802 +-0.006464  +0.004201
1.290   0.2072  -0.04241    0.05380 +-0.005833  +0.008101

在列表示x,y,lefterror,righterror,buttomerror,toperror的地方,我将文件作为error=np.genfromtxt("standard correlation.1",skip_header=1)加载,最后我尝试将其作为

xerr=error[:,2:4]
yerr=error[:,4:]
x=error[:,0]
y=error[:,1]
plt.errorbar(x,y,xerr=xerr,yerr=yerr,fmt='')

当我试着运行它时,我知道当你把一个对象(比如一个列表)传递给一个需要numpy数组对象的参数时会出现这个错误,我不知道该如何解决这个问题,就像np.genfromtxt文件应该总是返回一个数组。你知道吗

谢谢你的帮助。你知道吗

编辑:我更改了文件以删除“+”字符,因为读取“+-”会在底部错误列中产生NaN值,但仍然会得到相同的错误。你知道吗


Tags: 文件对象from错误nppageerror数组
2条回答

数组numpy期望单个错误条的形状是(2, N)。因此,您需要转置数组error[:,2:4].T 而且,matplotlib.errorbar了解那些与数据相关的值。如果x是值,而(xmin, xmax)是相应的错误,则errorbar从x-xminx+xmax。因此,errorbar数组中不应该有负值。你知道吗

import numpy as np
import matplotlib.pyplot as plt

f = "1   0.1  0.05    0.1 0.005  0.01" + \
   " 1.197   0.1838  -0.03504    0.07802 -0.006464  0.004201 " + \
   " 1.290   0.2072  -0.04241    0.05380 -0.005833  0.008101" 
error=np.fromstring(f, sep=" ").reshape(3,6)
print error
#[[ 1.        0.1       0.05      0.1       0.005     0.01    ]
# [ 1.197     0.1838   -0.03504   0.07802  -0.006464  0.004201]
# [ 1.29      0.2072   -0.04241   0.0538   -0.005833  0.008101]]

xerr=np.abs(error[:,2:4].T)
yerr=np.abs(error[:,4:].T)
x=error[:,0]
y=error[:,1]
plt.errorbar(x,y,xerr=xerr,yerr=yerr,fmt='')
plt.show()

关于值错误,它可能是由+-问题引起的。你知道吗

多亏了hpaulj,我注意到错误条的形状是(30,2),但是plt.errobar()期望错误数组的形状是(2,n),因为python通常在类似的操作中转置矩阵并自动避免这个问题,我想它也会这样做,但我决定按以下方式更改行:

xerr=error[:,2:4]
yerr=error[:,4:]

进入

xerr=np.transpose(error[:,2:4])
yerr=np.transpose(error[:,4:])

这使得脚本运行正常,虽然我仍然不明白为什么以前的代码给了我这样一个错误,如果有人能帮我弄清楚,我将不胜感激。你知道吗

相关问题 更多 >