You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python3如何统计角度列表中折叠度小于45度的元素数量?

实现方案

首先明确核心注意点:np.arccos返回的计算结果为弧度单位,45°对应的弧度值为np.pi/4,不可直接用数值45和angolo做大小对比。

你的原代码未存储所有元素的角度值,仅保留了最后一次循环的单个角度值,因此无法直接统计符合条件的元素总数,只需做少量修改即可实现需求:

完整修改后代码

import sys,os
import numpy as np
fn='listadir.txt' # <=== lista_dir
with open(fn,'r') as f:
  lines=f.readlines()
# 存储所有文件夹下符合条件的元素总数、总元素数,用于算全局平均
total_valid = 0
total_elements = 0

for l in lines:
    os.chdir('C:\\Users\\simone\\anaconda3\\Ex_Files_Python_Statistics_EssT\\' + l.strip('\n'))
    os.system('dir /b cnf-* > listacnf.txt')
    with open('listacnf.txt','r') as f:
        linescnf=f.readlines()
    Q=np.matrix([[0.0,0.0,0.0],[0.0,0.0,0.0],[0.0,0.0,0.0]])
    cc = 1
    # 新增:存储当前文件夹下所有元素的角度
    current_angles = []
    for ll in linescnf:
        with open(ll.strip('\n')) as ff:
            cnft=ff.readlines()
        cnf=cnft[1:]
        for lc in cnf:
            lv = lc.strip('\n').split()
            ux = float(lv[3])
            uy = float(lv[4])
            uz = float(lv[5])
            Qxx = ux*ux
            Qxy = ux*uy
            Qxz = ux*uz
            Qyx = uy*ux
            Qyy = uy*uy
            Qyz = uy*uz
            Qzx = uz*ux
            Qzy = uz*uy
            Qzz = uz*uz
            Q += np.matrix([[Qxx, Qxy, Qxz],[Qyx, Qyy, Qyz],[Qzx,Qzy, Qzz]])
            cc += 1
            angolo = np.arccos(ux*uy*uz)
            # 新增:把当前角度存入列表
            current_angles.append(angolo)
    Q = Q/cc
    os.chdir('..')
    
    # 统计当前文件夹下小于45度的元素数量
    threshold = np.pi / 4 # 45度转弧度
    current_arr = np.array(current_angles)
    current_valid = np.sum(current_arr < threshold)
    current_avg = current_valid / len(current_arr) # 单文件夹平均占比/数量
    # 累加到全局统计
    total_valid += current_valid
    total_elements += len(current_arr)
    print(f"当前文件夹{l.strip()}:小于45度的元素共{current_valid}个,占比{current_avg:.2%}")

# 全局统计
global_avg_count = total_valid / len(lines) # 每个文件夹平均符合数量
global_avg_ratio = total_valid / total_elements # 全局符合占比
print(f"全局统计:所有文件夹平均每个含{global_avg_count:.2f}个小于45度的元素,整体占比{global_avg_ratio:.2%}")

核心统计逻辑说明

  • 用np.array(角度列表) < 阈值生成布尔数组,符合条件的位置为True(对应数值1),不符合为False(对应数值0)
  • 直接对布尔数组调用np.sum()即可得到符合条件的元素总数,无需额外循环判断。

内容的提问来源于stack exchange,提问作者Zikan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 20:15:03