这里的Python很新。我正在尝试计算有偏见的抛硬币发生事件的条件概率。除了 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/content_spare_request"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/root1"
android:layout_margin="10dp"
android:orientation="vertical"
android:layout_marginBottom="20dp"
android:background="#fff">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="50dp"
android:orientation="horizontal">
<TextView
android:id="@+id/spare_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="5dp"
android:layout_marginStart="2sp"
android:layout_marginTop="07dp"
android:paddingLeft="10dp"
android:text="@string/tip_brush_size"
android:textAppearance="?android:attr/textAppearanceLarge"
android:textColor="@color/facebook"
android:textSize="16sp" />
<Button
android:id="@+id/btn_spare"
android:layout_width="20dp"
android:layout_height="match_parent"
android:background="@color/facebook"
android:layout_alignParentRight="true"
android:minHeight="0dp"
android:minWidth="0dp" />
</RelativeLayout>
<View
android:id="@+id/view2"
android:layout_width="match_parent"
android:layout_height="3dp"
android:layout_below="@+id/spare_text"
android:background="@color/facebook"
android:gravity="center" />
<android.support.v7.widget.RecyclerView
android:id="@+id/spare_recyclerview"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/view2" />
<TextView
android:id="@+id/empty_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:gravity="center_horizontal"
android:paddingBottom="75dp"
android:text="No Data Available"
android:visibility="visible" />
</LinearLayout>
部分之外,我已经找到了大部分代码 - 具体来说,我不确定是使用if statement
还是pass
。更具体地说,我希望分母能够反映满足要求的迭代次数,而不是迭代总次数。
例如,假设我想计算6组的概率,假设我们在10次硬币翻转后超过5组 - 该函数将读作continue
,其中参数代表1000次迭代,10次硬币投掷,分别为6组和5组。让我们假设只有500次迭代符合要求 - 因此,simulate_three(1000,10,6,5)
的分母是500,而不是1000.但是,我不确定代码是否正常工作......
Outcome
答案 0 :(得分:1)
python文档有a great section on control flows.简而言之,pass
用作排序占位符,而continue
将继续下一次迭代。
根据我对您的描述的理解,您需要continue
,不 pass
。所以正确的版本看起来像:
if len(list(groupby(flips))) <= Z:
continue
Outcome.append(len(list(groupby(flips))))
更可读,更明确的版本可能是:
if len(list(groupby(flips))) <= Z:
pass
else:
Outcome.append(len(list(groupby(flips))))
当然,最直接的版本可能是:
if len(list(groupby(flips))) > Z:
Outcome.append(len(list(groupby(flips))))
因此,在这种情况下,只有当list
的长度大于Z
时才会将其添加到Outcome
。
您可以通过强制flip
函数仅返回H
来测试此问题。如果控制流程按预期工作,您将在倒数第二行上抛出除以零的错误。
答案 1 :(得分:0)
我认为您的代码包含更多错误,例如您需要使用浮点除法而不是整数除法(适当的类型转换)和条件概率计算公式需要更正,你计算的概率实际上是z得分,假设大量的IID变量试验,这里是修改后的代码,我认为它对你有用:
import random
from itertools import groupby
import statistics
import matplotlib.pyplot as plt
import numpy as np
# Function for biased coin
def flip(p): return 'H' if random.random() < p else 'T'
# Simulation
def simulate_three(X, N, Y, Z):
Outcome = [] # List of results
for i in range(X): # For loop for the X number of iterations
flips = [flip(0.6) for j in range(N)] # For loop for N number of coin flips
#print len(list(groupby(flips))), flips
if len(list(groupby(flips))) > Z: # If group condition is met
Outcome.append(len(list(groupby(flips)))) # store to list
prob = (1.0*len(filter(lambda x:x == 6, Outcome))) / len(Outcome) # conditional probability
expval = (1.0*sum(Outcome))/(len(Outcome)) # conditional expectation
zscore = (Y - expval) / statistics.stdev(Outcome) # by CLT, assuming IID variables, compute the z score
print prob
print expval
print zscore
weights = (1.0*np.ones_like(Outcome))/len(Outcome)
plt.hist(Outcome, weights=weights, facecolor='green', alpha=0.75)
plt.xlabel('#Groups')
plt.ylabel('Conditional Probability of Groups | (> 5 groups)')
plt.title('Conditional Probability Distribution')
plt.grid(True)
plt.show()
simulate_three(1000,10,6,5)
# 0.551198257081 : this is the conditional probability
# 6.64052287582 : this is the conditional expectation
# -0.773961977708 : this is the z-score