首页 > 编程问答 >python 以及将数组传递给函数的问题

python 以及将数组传递给函数的问题

时间:2024-07-24 04:13:53浏览次数:16  
标签:python arrays numerical-methods

我需要求解一些常微分方程 $\frac{d y}{d x} = f(x) = x^2 ln(x)$ 并继续在限制 0 之间创建数组 xpt。 <= xpt <= 2因为我必须小心 xpt = 0,所以我将函数定义如下

def f(x):

if x <= 1.e-6:
    return 0.
else:
    return np.square(x)*np.log(x)

我的调用程序读取

Npt = 200

xpt = np.linspace( 0.,2.,Npt)

fpt = np.zeros(Npt)

但是,当我拨打电话时 fpt = f(xpt) 我收到错误

“ValueError:具有多个元素的数组的真值不明确。使用 a.any() 或 a.all()”

我可以通过引入 for 循环来解决此问题,写

for ip in range(Npt):

fpt[ip] = f(xpt[ip])

但这似乎是一种黑客行为并且不能令人满意。

我尝试查看使用 a,any() 的建议并将该函数重新定义为

def Newf(x):

if ((x <= 1.e-6).all()):
    return 0.
else:
    return np.square(x*np.log(x))

但这似乎将 f(0.) 作为 nan。

任何有关如何继续的帮助都深表感谢。


遇到的问题是,正试图在 if 语句中对整个 NumPy 数组执行比较。 x < 1.e-6 返回一个布尔数组,的 if 语句不知道如何处理它。

无需使用循环或 any() / all() 即可实现此目标。NumPy 提供了一种称为 向量化 的功能,允许对整个数组执行操作。

以下是修复后的代码:

import numpy as np

def f(x):
  # 使用 np.where 创建一个掩码,以有条件地应用条件
  return np.where(x <= 1.e-6, 0, np.square(x) * np.log(x))

Npt = 200
xpt = np.linspace(0., 2., Npt)
fpt = f(xpt)  # 现在可以直接将整个数组传递给 f

print(fpt) 

这个版本的代码做了什么:

  1. np.where(条件,值 if True,值 if False) :此函数允许我们在数组中应用基于条件的逻辑。
  2. x <= 1.e-6 :这为数组 x 中的每个元素创建一个布尔数组,其中 True 表示值小于或等于 1.e-6
  3. 0 :如果条件为 True (即 x 中的值小于或等于 1.e-6 ),则返回此值。
  4. np.square(x) * np.log(x) :如果条件为 False ,则返回此值。

通过使用 np.where ,避免了需要显式循环,并且代码将更有效地运行,因为 NumPy 的向量化操作针对速度进行了优化。

标签:python,arrays,numerical-methods
From: 78785160

相关文章

  • 如果 Python 脚本正在使用文件夹,如何在文件资源管理器中进行更改时防止 Windows 的“
    我有一个简单的脚本,显示在QTreeView中的QListView中选择的目录的内容,我想添加打开文件资源管理器的功能,以让用户编辑目录内的内容。但是,添加新的文件夹和文件可以,但删除或移动文件夹或文件会提示“文件夹正在使用”错误:此操作无法完成,因为该文件已在另一个程......
  • 如何使用 Python API 获取每个模型的活跃用户列表、最后登录信息
    我想通过PythonAPI获取我的dbt项目的所有模型中的活动或非活动用户列表。这可能吗?我尝试列出模型,但无法获取用户信息,如用户名、项目、以及上次活动或上次登录。不幸的是,dbt本身并不跟踪你所寻找的用户活动数据(最后登录、活跃用户等)。dbt的主要功能是转换数据,而不......
  • Python tkinter 窗口不断关闭,我不知道为什么
    我正在尝试制作一个有趣的小程序,其中每小时左右就会有一只毛茸茸的动物走过屏幕。我有一个主窗口,它启动一个循环,每小时左右播放一次动画/声音,但是在口袋妖怪第一次完成行走后,整个程序就会结束。我认为这可能与我设置tkinter窗口的方式有关,但我无法弄清楚。我认为在这里包含......
  • 用于自动访问 MongoDB Atlas CLI 的 Python 脚本
    我想编写一个Python脚本,以便普通用户可以访问他的数据库并从他的终端执行CRUD操作。我正在查看官方文档,但我有点迷失。有人可以给我指点基本教程来开始吗?当然,以下是如何构建Python脚本来访问MongoDBAtlasCLI的基本教程:先决条件:MongoDBAtlas......
  • Python实现简单学生登陆系统
     代码:importhashlibclassStudent:def__init__(self,username,password):#初始化学生对象,存储用户名和加密后的密码self.username=usernameself.password=hashlib.sha256(password.encode()).hexdigest()defcheck_passwo......
  • python猜数字游戏
    好的,下面是一个简单的小游戏代码示例,使用Python编写。这个游戏是一个猜数字游戏,玩家需要猜一个1到100之间的随机数。importrandomdefguess_number_game():print("欢迎来到猜数字游戏!")print("我已经想好了一个1到100之间的数字,请你猜一猜。")secret_num......
  • 【Python正则表达式】:文本解析与模式匹配
    文章目录1.正则表达式2.re模块3.修饰符3.元字符3-1字符匹配元字符3-2重复次数限定元字符3-3字符集合匹配元字符3-4分组元字符3-5边界匹配元字符3-6字符类别匹配元字符4.技巧4-1贪婪与非贪婪5.案例1.正则表达式正则表达式面向什么样的问题?1、判断一个字......
  • 仅需增加2行代码,Python量化策略速度提升20+倍!
    今天分享一个Python量化策略加速的小技巧,不用修改原有代码,只需在原有代码里新增2行,策略执行速度便可能提高20+倍,正文开始~现如今,无论是入门量化投资,还是做数据分析、机器学习和深度学习,Python成为了首选编程语言,直观的原因就是容易上手和资源丰富,但Python有个根深蒂固的标签,......
  • Python基础-Anaconda,Spyder,数据类型
    1、Python与Anaconda在想使用Python之前需先安装Python,以及PythonIDE和Python的库,而用Anaconda就可以一键安装。Anaconda包含了Python,常用的python库以及IDE,还具有强大的环境和python包的管理能力。PythonIDE(IntegratedDevelopmentEnvironment,集成开发环境)是一个为开发......
  • python实现图像特征提取算法2
    python实现广义Hough变换算法、Hough变换算法1.广义Hough变换算法详解算法步骤Python实现详细解释优缺点2.Hough变换算法详解算法步骤Python实现详细解释优缺点实现广义Hough变换算法(GeneralizedHoughTransform)可以用于检测任意形状的......