子数组2

队友:http://home.cnblogs.com/u/Megau/

一、分析

先将一个长度为n的数组扩大两倍,即在这个数组后加一个一样的数组,然后依次取长度为n,数组开头元素为原数组的单元构成n个数组。对n个数组依次进行求最大子数组和,然后在这一堆和里找出最大和。

二、代码

str1="4 -2 3 -1 -1 10"
print"请输入一个数组"
str1=raw_input()
counter_1=0
str2=str1+" "+str1
str2=str2.split()
#print str2
counter_1=0

for i in str2:
    counter_1=counter_1+1
counter_1=counter_1/2
#print counter_1
answer_array=[0]*counter_1


for j in range(0,counter_1):
    str3=str2[j:j+counter_1]
    #print"str3",str3

    sum_record_unexcept=0
    str3[0]=int(str3[0])
    sum_constant_add=0

    for i in str3:
        i=int(i)
        sum_record_unexcept=max(sum_record_unexcept,sum_constant_add)
        sum_constant_add=max(sum_constant_add+i,i)
    answer_array[j]=max(sum_constant_add,sum_record_unexcept)
    #print "answer_array[i]",answer_array[j]

#print"answer",answer_array
maxment=answer_array[0]
for i in answer_array:
    if(maxment<i):
        maxment=i

print"最大值为",maxment

 

三、截图

 

转载于:https://www.cnblogs.com/surver/p/5326307.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
相关系数公式: $$r_{xy}=\frac{\sum_{i=1}^n(x_i-\overline{x})(y_i-\overline{y})}{\sqrt{\sum_{i=1}^n(x_i-\overline{x})^2}\sqrt{\sum_{i=1}^n(y_i-\overline{y})^2}}$$ 其中,$x$和$y$为两个变量的取值,$n$为样本数量,$\overline{x}$和$\overline{y}$分别为$x$和$y$的样本均值。 具体步骤如下: 1. 首先,我们需要根据题目的要求获得数组$A1$和$A2$。 数组$A1$为A的第4行4列到第8行8列: ``` A1 = A[3:7, 3:7] ``` 注意,Python中的数组索引是从0开始的,因此实际对应的是第3行到第7行,第3列到第7列。 数组$A2$为A的第5行5列到第9行9列,但需要去掉其中任何一个元素小于0.5的列: ``` A2 = A[4:9, 4:9] mask = A2 >= 0.5 # 创建掩码 A2_masked = np.ma.masked_where(~mask, A2) # 将小于0.5的元素用masked array的形式替代 A2_masked = A2_masked[:, ~np.all(mask == False, axis=0)] # 去掉所有元素都小于0.5的列 ``` 在这里,我们使用了NumPy库中的掩码(mask)和masked array的功能来实现元素小于0.5的过滤。 2. 然后,我们需要计算这两个数组对应每一列的相关系数。由于题目没有说明具体需要输出哪些结果,以下代码将分别计算每一列的样本均值、方差、协方差和相关系数,并将结果保存在相应的数组中: ``` n = A1.shape[0] A1_means = np.mean(A1, axis=0) A1_covs = np.cov(A1.T, bias=1) * (n-1) A2_means = np.mean(A2_masked, axis=0) A2_covs = np.cov(A2_masked.T, bias=1) * (n-1) corrs = np.zeros(A2_masked.shape[1]) for i in range(A2_masked.shape[1]): if not np.any(~mask[:,i]): # 如果这一列所有元素都小于0.5,那么相关系数为0 corrs[i] = 0 else: A1_diffs = A1 - A1_means A2_diffs = A2_masked[:,i] - A2_means[i] cov = np.sum(A1_diffs * A2_diffs.reshape(-1,1), axis=0) / (n-1) std_devs = np.sqrt(A1_covs.diagonal() * A2_covs[i]) corrs[i] = cov / std_devs ``` 以上代码依次计算了: - 数组$A1$每一列的样本均值($A1\_means$); - 数组$A1$每一列的样本方差协方差矩阵($A1\_covs$); - 数组$A2$中没有小于0.5元素的每一列的样本均值($A2\_means$); - 数组$A2$中没有小于0.5元素的每一列的样本方差协方差矩阵($A2\_covs$); - 数组$A1$和数组$A2$中没有小于0.5元素的每一列的相关系数($corrs$)。 在计算相关系数的过程中,我们需要注意以下两个问题: - 如果某一列中所有元素都小于0.5,那么该列对应的相关系数为0; - 我们没有使用$cov(x,y) = E[(x-\overline{x})(y-\overline{y})]$的式来计算协方差,因为在有掩码的情况下无法直接计算数学期望。 3. 最后,如果需要输出每一列的相关系数,只需要将数组$corrs$输出即可: ``` print(corrs) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值