我有一个信号,我想找到平均高度的值。这是通过找到零交叉点并计算每个零交叉点之间的最大值和最小值,然后平均这些值来实现的。你知道吗
当我想用np.where()
找出信号过零的位置时,我的问题就出现了。当我使用np.where()
时,我得到一个元组中的结果,但是我希望它在一个数组中,在这个数组中我可以计算零的交叉次数。你知道吗
我是Python新手,来自Matlab,对所有不同的类都有点混淆。如您所见,我得到了一个错误,因为nu = len(zero_u)
给出了1
,因为整个数组作为一个元素写在一个元组中。你知道吗
你知道怎么解决这个问题吗?你知道吗
代码如下所示:
import numpy as np
def averageheight(f):
rms = np.std(f)
f = f + (rms * 10**-6)
# Find zero crossing
fsign = np.sign(f)
fdiff = np.diff(fsign)
zero_u = np.asarray(np.where(fdiff > 0)) + 1
zero_d = np.asarray(np.where(fdiff < 0)) + 1
nu = len(zero_u)
nd = len(zero_d)
value_max = np.zeros((nu, 1))
value_min = np.zeros((nu, 1))
imaxvec = np.zeros((nu, 1))
iminvec = np.zeros((nu, 1))
if (nu > 2) and (nd > 2):
if zero_u[0] > zero_d[0]:
zero_d[0] = []
nu = len(zero_u)
nd = len(zero_d)
ncross = np.fmin(nu, nd)
# Find Maxima:
for ic in range(0, ncross - 1):
up = int(zero_u[ic])
down = int(zero_d[ic])
fvec = f[up:down]
value_max[ic] = np.amax(fvec)
index_max = value_max.argmax()
imaxvec[ic] = up + index_max - 1
# Find Minima:
for ic in range(0, ncross - 2):
down = int(zero_d[ic])
up = int(zero_u[ic+1])
fvec = f[down:up]
value_min[ic] = np.amin(fvec)
index_min = value_min.argmin()
iminvec[ic] = down + index_min - 1
# Remove spurious values, bumps and zero_d
thr = rms/3
maxfind = np.where(value_max < thr)
for i in range(0, len(maxfind)):
imaxfind = np.where(value_max == maxfind[i])
imaxvec[imaxfind] = 0
value_max[imaxfind] = 0
minfind = np.where(value_min > -thr)
for j in range(0, len(minfind)):
iminfind = np.where(value_min == minfind[j])
value_min[iminfind] = 0
iminvec[iminfind] = 0
# Find Average Height
avh = np.mean(value_max) - np.mean(value_min)
else:
avh = 0
return avh
np.where
和np.nonzero
更清楚地解释了它返回一个元组,条件数组的每个维度有一个数组:这个
Out[74]
元组可以直接用作索引。你知道吗也可以从元组中提取数组:
我认为这是一个比
np.asarray(np.where(...))
更好的选择当我们在2d数组上使用
where
的这个约定时,它变得更清晰了我们再次用元组索引。
arr2[1,3]
实际上是arr2[(1,3)]
。[]
索引括号中的值实际上作为值的元组传递给索引函数。你知道吗np.argwhere
将transpose
应用于where
的结果,生成一个数组:这是相同的索引数组,但排列在二维列矩阵中。你知道吗
如果需要
where
的计数而不需要实际值,则可以使用稍微快一点的函数实际上
np.nonzero
使用count
首先确定它将返回的数组的大小。你知道吗相关问题 更多 >
编程相关推荐