我有已知宽度和尺寸的箱子(测量数量在内),我试图在R中找到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
我认为这样可行,但现在的问题是我需要将这个区域总结到中位数的LEFT,其位置是RmedhRd0s。我怎样才能在循环中使用它?我将需要分别在左侧和右侧工作,我试图了解如何正确和有效地做到这一点,虽然在一方。
提前谢谢。
答案 0 :(得分:0)
问题不在于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
提供的信息仍然有限。所以我最好的猜测是,由于您使用的是counter
语句,因此不再需要for循环。将您的代码更改为以下内容(删除for循环并使用您已有的i
变量而不是area = 0.
counter = 0 #used to count increments taken
increment = 0.
while area < half1sig:
a = 0.001 * len(hRd0s[counter])
area += a
increment += 0.001
counter += 1
uppersteps = counter * 0.001
uppersigma = uppersteps + RmedhRd0s
print area
print uppersigma
),看看它是否会得到修复:
increment
但正如我所说,信息仍然有限;例如,我不明白{{1}}变量在这里的作用是什么......