简体   繁体   English

如何使用numpy对行数组执行操作?

[英]How to perform operations with row arrays using numpy?

I have a matrix of absorbance values that I've pulled from a whole wack of spectra. 我有一个吸光度值矩阵,它是从整个光谱中得出的。 I call this matrix "specdt" 我称这个矩阵为“ specdt”

Each row represents the values over multiple samples at a specific wavelength. 每行代表特定波长下多个样本的值。 I want to find the r^2 values of the regression against a seperate array of concentration values called "Concentration." 我想针对称为“浓度”的单独的浓度值数组找到回归的r ^ 2值。

Here's what I have so far: 这是我到目前为止的内容:

regression = []
for row in specdt:
    x = Concentration
    y = specdt[row,:]
    slope, intercept, r_value, p_value, std_err = stats.linregress(x,y)
    regression.append(r_value**2)

regression_n = numpy.asarray(regression)
numpy.savetxt("r2_2.csv", regression_n, delimiter=",")

I get the error: 我收到错误:

Traceback (most recent call last):
   file "blah blah", line 42, in <module>
   y = specdt[row,:]
InexError: arrays used as indices must be of integer (or boolean) type

I suspected this is because "row" isn't an integer, so I tried to iterate over a "t" variable instead; 我怀疑这是因为“行”不是整数,所以我尝试对“ t”变量进行迭代。 no luck. 没运气。

I suspect it's the way I'm trying to pull the row into the y values for linregress, but I can't seem to find another way to do this. 我怀疑这是我试图将行拖入linregress的y值的方式,但是我似乎找不到其他方法来做到这一点。

Any advice is greatly appreciated! 任何意见是极大的赞赏!

edit: I should mention that 编辑:我应该提到

y = row

was the first thing i tried. 是我尝试的第一件事。

It gives me the following error: 它给了我以下错误:

Traceback (most recent call last):
  File "C:\Users\ME\Downloads\Personal\Spectrometer\test\Spectrum3.py", line 42, in <module>
    slope, intercept, r_value, p_value, std_err = stats.linregress(x,y)
  File "C:\Python27\lib\site-packages\scipy\stats\_stats_mstats_common.py", line 92, in linregress
    ssxm, ssxym, ssyxm, ssym = np.cov(x, y, bias=1).flat
  File "C:\Python27\lib\site-packages\numpy\lib\function_base.py", line 2432, in cov
    X = np.vstack((X, y))
  File "C:\Python27\lib\site-packages\numpy\core\shape_base.py", line 230, in vstack
    return _nx.concatenate([atleast_2d(_m) for _m in tup], 0)
ValueError: all the input array dimensions except for the concatenation axis must match exactly

The dimensions of the conncentration array and the row should be the same. 浓度数组和行的尺寸应相同。

linregress works beautifully if I pull out a single column (I transposed specdt.) This is the working code, if that helps: 如果我拔出一列(换位,则为佳),linregress可以很好地工作。这是有效的代码,如果有帮助的话:

##take only column 26 or the values for 2268; print stuff
#Absorbance2268 = spectral_data[:, 25]

#print(Absorbance2268.shape)
#print(Absorbance2268)
#
##manual entry of concentration values + array info
#conc =[0,0,0,0,0,6,6,6,6,6,6,6,6,6,6,8,8,8,8,8,10,10,10,10,10,4,4,4,4,4]
#Concentration = numpy.asarray(conc)
#
#print(Concentration.shape)
#print(Concentration)
#
##performing linear regression.
#x = Concentration
#y = Absorbance2268
#
#slope, intercept, r_value, p_value, std_err = stats.linregress(x,y)
#
#print "r-squared:", r_value**2
for y in specdt:    # <---
    x = Concentration
    slope, intercept, r_value, p_value, std_err = stats.linregress(x,y)

The for loop gives the content of the rows themselves already. for循环已经给出了行本身的内容。 If you want the row index, use 如果要行索引,请使用

for row, y in enumerate(specdt):
    ...

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM