我有一个已知宽度和大小的箱子(测量计数在里面),我试图找到在R中高于和低于中位数的位置,这与我的总直方图面积的34.15%(两边,68.3%像这样:https://en.wikipedia.org/wiki/68%E2%80%9395%E2%80%9399.7_rule)有关。不过,我不在乎图表。你知道吗
第一次尝试:
#hRd0s is an array of arrays, where the stuff inside of it are the bins
area = 0.
counter = 0 #used to count increments taken
increment = 0.
for i in range(len(hRd0s)): #sneaking suspicion this is where problem starts
a = 0.001 * len(hRd0s[i])
area += a
increment += 0.001
counter += 1
if area <= half1sig: #i have half1sig defined above
i +=1 #i figured this was how id move to next bin if half1sig wasnt satisfied
uppersteps = counter * 0.001
uppersigma = uppersteps + RmedhRd0s
print area
print uppersigma
它给我的错误是:
if area <= half1sig:
ValueError: The truth value of an array with more than one element is ambiguous.
Use a.any() or a.all()
更新1:我不再收到此ValueError通知。
第二次尝试:
area = 0.
counter = 0 #used to count increments taken
increment = 0.
while area < half1sig:
for i in range(len(hRd0s)):
a = 0.001 * len(hRd0s[i])
area += a
increment += 0.001
counter += 1
if area < half1sig:
i +=1
uppersteps = counter * 0.001
uppersigma = uppersteps + RmedhRd0s
print area
print uppersigma
我原以为这样行得通,但现在的问题是,我只需要把中间带左边的面积加起来,中间带的位置是RmedhRd0s。我怎样才能把这个加到我的循环中呢?我将需要在左侧和右侧分别工作,我试图了解如何正确和有效地做到这一点,虽然为一方。你知道吗
先谢谢你。你知道吗
问题不在于
half1sig
;问题在于area
,在您的代码中area
是一个数组,因为:如果
hRd0s
是一个数组,那么hRd0s[i]
将是一个数组。因此a
将是一个数组,因为a = 0.001 * hRd0s[i]
。现在当a
是一个数组时,area
也将是一个数组,因为area += a
。因此if area <= half1sig
没有意义,正如错误的回溯所示:ValueError: The truth value of an array with more than one element is ambiguous.
问题更新后:
提供的信息仍然有限。所以我最好的猜测是,既然您使用的是
while
语句,就不再需要for循环了。将代码更改为以下内容(删除for循环并使用已有的counter
变量而不是i
),然后查看它是否会得到修复:但正如我所说,信息仍然有限;例如,我不明白
increment
变量在这里的作用是什么。。。你知道吗相关问题 更多 >
编程相关推荐