应该是一个简单的问题,但我无法在任何地方找到答案.~python中的运算符被记录为按位反转运算符.精细.我注意到看似精神分裂的行为,即:
~True -> -2
~1 -> -2
~False -> -1
~0 -> -1
~numpy.array([True,False],dtype=int) -> array([-2,-1])
~numpy.array([True,False],dtype=bool) -> array([False,True])
Run Code Online (Sandbox Code Playgroud)
在前4个示例中,我可以看到python正在实现(如文档所述)~x = -(x+1),输入被视为int,即使它是布尔值.因此,对于标量布尔值,~不被视为逻辑否定.并非在使用int类型的布尔值定义的numpy数组上的行为相同.
~那么为什么在布尔数组上作为逻辑否定运算符工作(另请注意:~numpy.isfinite(numpy.inf) -> True?)?
我必须not()在标量上使用它是非常烦人的,但是not()无法否定数组.然后对于一个数组,我必须使用~,但~不会否定一个标量......
我有一个独立变量值的一维数组(x_array),它与具有多个时间步长()的3D numpy空间数据数组中的时间步长相匹配y_array.我的实际数据要大得多:300+时间步长和高达3000*3000像素:
import numpy as np
from scipy.stats import linregress
# Independent variable: four time-steps of 1-dimensional data
x_array = np.array([0.5, 0.2, 0.4, 0.4])
# Dependent variable: four time-steps of 3x3 spatial data
y_array = np.array([[[-0.2, -0.2, -0.3],
[-0.3, -0.2, -0.3],
[-0.3, -0.4, -0.4]],
[[-0.2, -0.2, -0.4],
[-0.3, np.nan, -0.3],
[-0.3, -0.3, -0.4]],
[[np.nan, np.nan, -0.3],
[-0.2, -0.3, -0.7],
[-0.3, -0.3, -0.3]],
[[-0.1, -0.3, np.nan],
[-0.2, -0.3, np.nan],
[-0.1, np.nan, np.nan]]])
Run Code Online (Sandbox Code Playgroud)
我想计算每个像素的线性回归,将获得的R平方,P值,截距和斜率为每个xy像素y_array,为每个时间步长值 …
我想查看一些实体的趋势(SysNr)
我的数据跨越3年(2014,2015,2016)
我正在查看大量变量,但会将此问题限制为一个('res_f_r')
我的DataFrame看起来像这样
d = [
{'RegnskabsAar': 2014, 'SysNr': 1, 'res_f_r': 350000},
{'RegnskabsAar': 2015, 'SysNr': 1, 'res_f_r': 400000},
{'RegnskabsAar': 2016, 'SysNr': 1, 'res_f_r': 450000},
{'RegnskabsAar': 2014, 'SysNr': 2, 'res_f_r': 350000},
{'RegnskabsAar': 2015, 'SysNr': 2, 'res_f_r': 300000},
{'RegnskabsAar': 2016, 'SysNr': 2, 'res_f_r': 250000},
]
df = pd.DataFrame(d)
RegnskabsAar SysNr res_f_r
0 2014 1 350000
1 2015 1 400000
2 2016 1 450000
3 2014 2 350000
4 2015 2 300000
5 2016 2 250000
Run Code Online (Sandbox Code Playgroud)
我的愿望是对每个实体(SysNr)进行线性回归并返回斜率和截距
我想要的输出是上面的
SysNr intercept slope
0 …Run Code Online (Sandbox Code Playgroud) values=([0,2,1,'NaN',6],[4,4,7,6,7],[9,7,8,9,10])
time=[0,1,2,3,4]
slope_1 = stats.linregress(time,values[1]) # This works
slope_0 = stats.linregress(time,values[0]) # This doesn't work
Run Code Online (Sandbox Code Playgroud)
有没有办法忽略NaN并对剩余值进行线性回归?
非常感谢。
-gv
我有两个一维数组,我想做一些线性回归.我用了:
slope, intercept, r_value, p_value, std_err = stats.linregress(x, y)
Run Code Online (Sandbox Code Playgroud)
但是斜率和截距总是NAN,NAN.我读了一点,我发现如果x或y有一些NAN,那就是预期的结果.我试过这个 解决方案,但它不起作用,因为在我的情况下,只有y包含一些NAN; 不是x.所以使用该解决方案,我有错误:
ValueError: all the input array dimensions except for the concatenation axis must match exactly.
我该如何解决这个问题?