相关文章推荐
快乐的红酒  ·  一加7 Pro屏幕获DisplayMate ...·  1 年前    · 
失落的炒饭  ·  《2023年中国番茄酱罐头行业深度研究报告》 ...·  1 年前    · 
性感的钥匙扣  ·  中国证监会行政处罚决定书(新疆中基实业股份有 ...·  1 年前    · 
坏坏的西红柿  ·  智能制造与装备学院-深圳信息职业技术学院招生网·  2 年前    · 
活泼的领结  ·  xulrunner-1.9.2.28pre. ...·  2 年前    · 
Code  ›  如何解决 NumPy 无法计算其中一个 5 元素列表的标准差的问题开发者社区
https://cloud.tencent.com/developer/article/2429359
刚分手的咖啡豆
2 年前
用户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 Pro屏幕获DisplayMate A+认证-苏宁头条
1 年前
失落的炒饭  ·  《2023年中国番茄酱罐头行业深度研究报告》-华经产业研究院发布
1 年前
性感的钥匙扣  ·  中国证监会行政处罚决定书(新疆中基实业股份有限公司、刘一、文勇等8名责任人)_财经_中国网
1 年前
坏坏的西红柿  ·  智能制造与装备学院-深圳信息职业技术学院招生网
2 年前
活泼的领结  ·  xulrunner-1.9.2.28pre.en-us.linux-x86_64.tar - CSDN文库
2 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
Code - 代码工具平台
© 2024 ~ 沪ICP备11025650号