首页 > 解决方案 > 在 Python 中创建和绘制一个数组作为另一个数组中值的函数

问题描述

我是一个编程菜鸟,我只是在几周内更密集地使用 Python,但是,我目前需要它用于统计应用程序,我正在尝试执行以下操作:

创建一个从 1 到Q=A q的整数N数组(因此N=[1,2,...,Q-1,Q] ),并使用它来创建和绘制一个包含函数P值的数组(N)对二项式系数求和。Aq是整数常量(N>q故意作为真/假语句在那里)。我目前有以下代码:

#Constants {A,Q,S,sigma} are set
q=Q/A
n = np.linspace(1,Q,Q,dtype=int) #variable array
Sum = np.zeros((1,Q)) 
Iteration = np.zeros((1,Q))

alpha = 0
while alpha < A:
    alpha=alpha+1

    Iteration = sigma^alpha * (comb(n-1,alpha-1) -(n>q)*alpha*comb( max(0,n-q-1), alpha-1) )     
    Sum = Sum + Iteration
    

这会在“Iteration=...”行(也可能在下一行)中返回一个 typeError“只有整数标量数组可以转换为标量索引”,我无法找出问题到底是什么以及如何解决这个问题。

还; 我可能会以一种复杂的方式进行求和;如果有更好的方法在 python 中总结这一点,也欢迎为此提供帮助。

提前感谢您的帮助!

标签: pythonarraysfunctionplotstatistics

解决方案


问题来自以下行:

Iteration = sigma^alpha * (comb(n-1,alpha-1) -(n>q)*alpha*comb( max(0,n-q-1), alpha-1) )

由于comb 的参数必须是两个非负整数,请参见此处,当您传入n(一个ndarray)时,comb 将返回您提到的TypeError。

可能你可以环绕while循环并使其成为一个函数?然后您可以对其进行迭代并将结果附加到列表中。

def this_fun(n):
Sum = 0
Q = 1000
A = 100
sigma = 1
q = int(Q / A)
alpha = 0
while alpha < A:
    alpha = alpha+1
    Iteration = sigma^alpha * (comb(n-1,alpha-1) -(n>q)*alpha*comb( max(0,n-q-1), alpha-1) )
    Sum += Iteration
return Sum

P_N=[]
N = 100
for i in range(1,N):
    P_N.append(this_fun(i))

您必须仔细检查迭代行上的逻辑,以确保您正在实现数学通知的目的,并为 Q、A 和 N 输入一些合理的值。

该函数看起来好像我针对 N 绘制 P_N,这是您所期望的吗? 在此处输入图像描述


推荐阅读