相关文章推荐
温柔的拐杖  ·  长者版-银川市教育局·  7 月前    · 
光明磊落的墨镜  ·  承德市医疗保障局 监管动态 ...·  1 年前    · 
怕考试的日光灯  ·  金庸群侠传吧的精品贴_金庸群侠传吧_百度贴吧·  1 年前    · 
冷冷的盒饭  ·  苹果教育优惠 - 商品搜索 - 京东·  1 年前    · 
咆哮的勺子  ·  买个相公带回家 镜衍_小红书·  1 年前    · 
Code  ›  如何解决 NumPy 无法计算其中一个 5 元素列表的标准差的问题开发者社区
https://cloud.tencent.com/developer/article/2429359
刚分手的咖啡豆
10 月前
用户11021319

如何解决 NumPy 无法计算其中一个 5 元素列表的标准差的问题

原创
前往小程序,Get 更优 阅读体验!
立即前往
腾讯云
开发者社区
文档 建议反馈 控制台
首页
学习
活动
专区
工具
TVP
最新优惠活动
文章/答案/技术大牛
发布
首页
学习
活动
专区
工具
TVP 最新优惠活动
返回腾讯云官网
用户11021319
首页
学习
活动
专区
工具
TVP 最新优惠活动
返回腾讯云官网
社区首页 > 专栏 > 如何解决 NumPy 无法计算其中一个 5 元素列表的标准差的问题

如何解决 NumPy 无法计算其中一个 5 元素列表的标准差的问题

原创
作者头像
用户11021319
修改 于 2024-06-18 16:30:07
81 0
修改 于 2024-06-18 16:30:07
  1. 问题背景
    • 在使用 NumPy 计算统计结果时发现,NumPy 能够接受原始数据列表来计算标准差,却无法接受经过计算后的结果列表。
    • 尝试将 std(f10) 替换为 std(solf10) ,但引发了错误: AttributeError: 'Float' object has no attribute 'sqrt' 。
    • 使用 print(type(f10), type(solf10)) 检查数据结构,发现它们都是 <class 'list'> 类型,推测数据结构并非导致问题的根源。
  2. 解决方案
    • 答案 1 指出问题在于 solf10 列表中包含的元素是 sympy 的 Float 对象,而非 NumPy 可以识别的 C double 对象。因此,需要将这些 sympy 对象显式转换为真正的浮点数。
    • 答案 2 指出了 m10kg 列表中元素的类型问题。由于整数除法会产生整数结果,导致 m10kg 中的元素全部为 1,而不是预期的浮点数。将除法运算符更改为浮点除法 x/1000.0 可以解决此问题。

代码示例

代码语言: python
代码 运行次数: 0
复制
# 导入必要的库
from sympy import *
from numpy import *
import matplotlib.pyplot as plt
g = 9.81
# 给定数据
l1, l2, l3 = 0.023, 0.07492, 0.0325
mw = 0.220
w = g*mw
# 收集的数据
m10 = [1540, 1500, 1400, 1400, 1670]
m10kg = [x / 1000.0 for x in m10]  # 将整数除法改为浮点除法
m12 = [1220, 1300, 1200, 1050, 900]
m12kg = [x / 1000.0 for x in m12]
m15 = [770, 790, 740, 760, 750]
m15kg = [x / 1000.0 for x in m15]
# 计算从质量到重力的转换,单位为牛顿
f10, f12, f15 = [x * g for x in m10kg], [y * g for y in m12kg], [z * g for z in m15kg]
# 计算数据的平均值
f10avg, f12avg, f15avg = mean(f10), mean(f12), mean(f15)
# 初始化符号变量
fr, my = symbols('fr, my')
# 关于原点的力矩方程
sumMoments = Eq(fr, (w * l2 + my * (l1 + l2)) / (l1 + l2 + l3))
# 从方程中解出作用在吸管上的牛顿力
solf10 = [solve(sumMoments.subs(my, x)) for x in f10]
solf12 = [solve(sumMoments.subs(my, x)) for x in f12]
solf15 = [solve(sumMoments.subs(my, x)) for x in f15]
# 将列表中的子列表展平
solf10 = [x for sub1 in solf10 for x in sub1]
solf12 = [x for sub1 in solf12 for x in sub1]
solf15 = [x for sub1 in solf15 for x in sub1]
# 计算 `solf10`、`solf12`、`solf15` 的平均值
solf10avg, solf12avg, solf15avg = mean(solf10), mean(solf12), mean(solf15)
# 绘图部分
# ------------------
# X 位置
x = [10, 12, 15]
# 注释样式
# plt.xkcd()
fig = plt.figure()
ax = fig.add_subplot(111)
offset = .5
# 绘制误差线图
ax.errorbar(x, [solf10avg, solf12avg, solf15avg], yerr=[std(f10), std(f12), std(f15)], lw=1.5)
# 添加文本标签
plt.text(x[0], solf10avg + offset, r'  $F_{10 cm}=\ %.3f \ N$' % (solf10avg), fontsize=18)
plt.text(x[2], solf15avg + offset, r'  $F_{15 cm}=\ %.3f \ N$' % (solf15avg), fontsize=18)
plt.text(x[1], solf12avg + offset, r'  $F_{12 cm}=\ %.3f \ N$' % (solf12avg), fontsize=18)
# 设置坐标轴范围
plt.xlim([9, 20])
plt.ylim([0, 20])
# 设置标题、标签和刻度
plt.title("Straw Yield Point Test", fontsize=24)
plt.xlabel("Length (cm)", fontsize=18)
plt.ylabel("Axial Force on Straw\n at Yield (N)", fontsize=18)
plt.minorticks_on()
plt.grid(which="both")
 
推荐文章
温柔的拐杖  ·  长者版-银川市教育局
7 月前
光明磊落的墨镜  ·  承德市医疗保障局 监管动态 营子区医保局持续开展打击欺诈骗保行动
1 年前
怕考试的日光灯  ·  金庸群侠传吧的精品贴_金庸群侠传吧_百度贴吧
1 年前
冷冷的盒饭  ·  苹果教育优惠 - 商品搜索 - 京东
1 年前
咆哮的勺子  ·  买个相公带回家 镜衍_小红书
1 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
Code - 代码工具平台
© 2024 ~ 沪ICP备11025650号