Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/nginx/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
访问数组某些部分的python方法_Python_Arrays_Numpy - Fatal编程技术网

访问数组某些部分的python方法

访问数组某些部分的python方法,python,arrays,numpy,Python,Arrays,Numpy,我有一个2D numpy数组,其中包含绘图的x(数据[:,0])和y(数据[:,1])信息 我希望将曲线拟合到数据,但仅使用数据的某些部分来确定拟合参数(例如,使用范围x=x1->x2和x3->x4中的数据)。我的计划是创建一个新的numpy数组,其中只包含我打算传递给SciPy曲线拟合例程的数据 index_range1 = np.where((data[:,0] > x1) and (data[:,0] < x2) index_range2 = np.where((data[:,

我有一个2D numpy数组,其中包含绘图的x(数据[:,0])和y(数据[:,1])信息

我希望将曲线拟合到数据,但仅使用数据的某些部分来确定拟合参数(例如,使用范围x=x1->x2和x3->x4中的数据)。我的计划是创建一个新的numpy数组,其中只包含我打算传递给SciPy曲线拟合例程的数据

index_range1 = np.where((data[:,0] > x1) and (data[:,0] < x2)
index_range2 = np.where((data[:,0] > x3) and (data[:,0] < x4)
index_range1=np.其中((数据[:,0]>x1)和(数据[:,0]x3)和(数据[:,0]
然后我将使用这些索引范围将感兴趣的数据拉入一个新数组,我可以将它传递给CurveFit

首先,考虑到Python可以处理复杂数组,这似乎是一种非常不符合Python的方法。其次,在运行脚本时,我收到一个错误,指出我需要在表达式中使用.any()或.all()作为索引范围1和2

因此,我想知道,是否有人对一种改进的、更具python风格的方法来解决这个问题有任何建议


谢谢!

要从另外两个数组中获得布尔数组,请使用
&
比较元素:

index_range1 = np.where((data[:,0] > x1) & (data[:,0] < x2))
index_range2 = np.where((data[:,0] > x3) & (data[:,0] < x4))
您可以通过以下方式缩短/使其更具可读性:

x, y = data.T
range1 = data[(x > x1) & (x < x2)]
range2 = data[(x > x3) & (x < x4)]
x,y=data.T
范围1=数据[(x>x1)和(xx3)和(x

注意:
x
y
是视图,因此修改
x
y
会修改
数据
,并且没有复制,因此不会降低代码速度。但是
范围
是副本,因为创建了副本,所以修改它们不会影响
x
y
,或者
数据
,以获得boolean数组在另外两个数组中,使用
比较元素:

index_range1 = np.where((data[:,0] > x1) & (data[:,0] < x2))
index_range2 = np.where((data[:,0] > x3) & (data[:,0] < x4))
您可以通过以下方式缩短/使其更具可读性:

x, y = data.T
range1 = data[(x > x1) & (x < x2)]
range2 = data[(x > x3) & (x < x4)]
x,y=data.T
范围1=数据[(x>x1)和(xx3)和(x

注意:
x
y
是视图,因此修改
x
y
会修改
数据
,并且没有复制,因此不会减慢代码的速度。但是
范围
是副本,因为创建了副本,因此修改它们不会影响此ca中的
x
y
、或
数据
se,您要使用
numpy.logical\u和

>>> import numpy as np
>>> data = np.arange(100)
>>> data[np.logical_and(50 <= data,data <= 70)]
array([50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66,
       67, 68, 69, 70])
>>将numpy作为np导入
>>>数据=np.arange(100)

>>>data[np.logical_和(50)在本例中,您希望使用
numpy.logical_和

>>> import numpy as np
>>> data = np.arange(100)
>>> data[np.logical_and(50 <= data,data <= 70)]
array([50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66,
       67, 68, 69, 70])
>>将numpy作为np导入
>>>数据=np.arange(100)

>>>数据[np.logical_和(50谢谢,我没有意识到逻辑和函数。这非常有帮助。谢谢,我没有意识到逻辑和函数。这非常有帮助。谢谢,我把这个和下面的答案结合起来,用一行来解决我的问题:
my_data=data[np.logical_或((数据[:,0]>x1)和(数据[:,0]x3)和(数据)你可以用管道,
a | b
代替
logical_或(a,b)
my_data=data[(data[:,0]>x1)和(data[:,0]x3)和(data[:,0]
用很多括号!谢谢,那更好!我想我更喜欢“logical_”
&
|
运算符的函数。后者实际上执行逐位运算。结果表明,它们对布尔数组给出相同的结果,因为
True
是1的子类,但我发现这不太清楚。谢谢,我将这一点和下面的答案结合起来,在一行中解决了我的问题:
>my_data=data[np.logical_or((data[:,0]>x1)和(data[:,0]x3)和(data[:,0]
@Ian您可以使用管道,
a|b
而不是
logical_或(a,b)
。例如,
my_data=data[((data[:,0]>x1)和(data[:,0]
使用大量的括号!谢谢,这样更好!FWIW,我想我更喜欢“logical_XXX”
&
|
运算符的函数。后者实际上执行位运算。结果表明,它们对布尔数组给出相同的结果,因为
True
是1的子类,但我发现这一点不太清楚。