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

时间:2022-07-09 21:41:52

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; no luck.

我怀疑这是因为“row”不是整数,所以我试图迭代一个“t”变量;没运气。

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.

conncentration数组和行的尺寸应该相同。

linregress works beautifully if I pull out a single column (I transposed specdt.) This is the working code, if that helps:

如果我拉出一个专栏,那么linregress工作得很漂亮(我转换了specdt。)这是工作代码,如果有帮助的话:

##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

1 个解决方案

#1


1  

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. If you want the row index, use

for循环已经给出了行本身的内容。如果你想要行索引,请使用

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

#1


1  

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. If you want the row index, use

for循环已经给出了行本身的内容。如果你想要行索引,请使用

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