首页 > 其他分享 >Julia基础知识

Julia基础知识

时间:2023-10-12 09:04:50浏览次数:39  
标签:变量 可以 Julia 基础知识 参数 数组 函数

在本章中,我们将学习并行计算所需的Julia基本部分:

  • 变量
  • 函数
  • 数组

在Julia中使用jupyter笔记本,运行单元格可以使用shift + enter,也可以使用运行按钮。

 运行第一个单元格可以看到,显示了最后一行的值,我们可以用分号抑制输出,尝试执行第二个单元格,可以发现没有输出。

单元格的顺序也很重要,以相反的顺序运行下边的两个单元格将不起作用。

 

变量

Julia中变量的用法与python十分相似,但是与C/C++等有很大不同。

创建变量

变量是与值关联(绑定)的名称,我们像往常一样将变量与值用=关联起来。

a = 1

分配变量时,右侧的值不会被复制到变量中,它只是名称与值的关联。

重新分配变量

我们可以重新分配一个变量,甚至可以使用另一种类型的值。但是,由于性能原因,请避免更改变量。

a = 2

a = 1.0

a = "Hi!"

依次输出2、1.0、Hi!

Unreachable Objects

当一个对象不再与变量关联时,用户就无法访问它。例如,当我们重新分配变量时,就会发生这种情况。另一种情况是局部变量(例如函数中的局部变量)超出范围。以下行分配一个大数组并将其分配给变量a。

如果我们将变量重新分配另一个值,则大数组将无法访问。

垃圾收集器

幸运的是,Julia有一个垃圾收集器,可以释放无法访问的对象。垃圾收集不会立即发生,而是在某个时刻发生。您也可以显式调用垃圾收集器,但是在实践中几乎从未这样做过。

GC.gc()

类型声明是可选的

Julia知道与变量关联的对象的类型。

如果需要,我们可以对类型进行注释,但是这不会提高性能,除非在非常特殊的情况下。因此,实际上并没有对类型进行任何注释。

如果用类型注释变量,则它不能引用其他类型的对象。

变量名

在Julia中选择变量名称有很大的灵活性,我们可以在变量和函数名称中使用UTF-8编码的字符。

 我们还可以使用希腊字母和其他数学符号,此处就不赘述了。

 

函数

Julia在很大程度是一种函数式编程语言。因此,Julia更关注函数而不是类型。这与面向对象形成鲜明对比,面向对象更以类为中心。因此,我们不需要了解Julia类型系统的系列来学习并行编程,但是我们需要对Julia函数的工作原理有相当深的了解。

定义函数

函数的定义如下面所示,end是十分必要的,return是可选的,默认返回最后一行的值,建议使用缩进。

Broadcast syntax

我们可以使用broadcast语法将函数逐个元素应用于数组。

 数学运算符也可以被广播,直接将向量相乘a*b是行不通的。如果我们想逐个元素相乘,可以使用如下的广播版本。

在定义这个函数之后,最后一行的x返回多少?结果是1

Reference

正如我们看到的,变量是按照值传递的,通过引用传递变量需要使用引用完成。

 定义函数(更短的方法)

对于短函数,我们可以跳过function和end关键字。

匿名(lambda)函数

我们可以把函数分配给变量,因此在许多情况下函数不需要函数名。我们可以简单地创建一个匿名函数(即没有名称的函数)并将其分配给一个变量。

add_anonymous不是函数名称,它只是与没有函数名称的函数关联的变量。

函数是第一类对象

我们可以像处理任何其他类型的对象一样使用Julia函数,例如,我们可以将函数分配给变量。然后就可以使用变量名称调用该函数。

我们还可以创建一个函数数组,这在python中不适用。

要调用数组中的特定函数,我们对数组进行索引,然后调用返回的函数。

高阶函数

高阶函数是接受和/或返回其他函数的函数,例如Julia中的count()函数。

例如,我们可以传递一个用户定义的函数来计算数组中偶数元素的数量:

Do块

还有另一种定义匿名函数的方法。如果一个函数在其第一个参数中接受一个函数,例如count,我们可以在调用第一个函数时跳过第一个参数,并定义我们想要在do块中传递的函数。这很有用,例如,如果我们想定义一个多行匿名函数,接下来的两个单元格是等效的。

返回多个值

Julia函数始终返回单个变量。要返回多个值,我们可以将它们包装在一个元组中。

可变数量的输入参数

Julia还支持具有多个参数的函数,args是一个包含所有参数的元组:

位置参数和关键字参数

函数可以像在python中一样组合位置参数和关键字参数,但是在Julia中关键字参数以;开头。

  1. 位置参数:这些参数是按照它们在函数签名中的位置顺序传递的参数。在调用函数时,你必须按照函数定义的参数顺序提供这些参数。

  2. 关键字参数:这些参数是使用参数名明确传递的参数。与位置参数不同,你可以不按照参数在函数签名中的位置顺序传递它们,只需指定参数名即可。

可选参数

我们可以为参数提供默认值,使其成为可选的。

 请思考最下面的x应该是什么值?

 

数组

Julia支持多维数组,它们与python中的Numpy十分类似。

Array literals

我们可以使用数组文字从给定值创建数组。

下面的代码创建一个3个整数的向量,Julia中的向量与列表没有区别。

数组初始化

我们可以创建所有条目等于0、1或特定给定值的数组。该值可以是任何Julia对象,甚至是函数。

数组推导式

我们还可以使用数组推导中的循环来创建数组中的项目。

索引

我们还可以通过索引数组来获取和设置数组的项目。

 不可变的元素类型

一旦设置,数组中的元素类型就无法更改。如果我们尝试使用不同类型的对象设置项目,Julia将尝试进行转换。这可能会失败,具体取决于传递的值。

 任何元素类型的数组

固定元素类型的数组看起来很死板,python的列表没有这个限制。但是我们可以使用Any类型的数组,它看起来和python列表一样灵活,甚至更灵活,因为它们可以包含函数。

循环

循环依次访问元素,第二个循环访问从1到数组长度的整数,并在每个整数处对数组进行索引。

第三个循环“枚举”数组中的项目。

数组索引默认从1开始

使用过程中需要注意。

切片分配一个新的数组

数组视图

如果要修改原始数组,使用view。

 

练习题

实现一个ex1(a)查找数组中最大项的函数a。它应该返回最大的项目及其在数组中的相应位置。如果有多个最大元素,则返回第一个。假设数组不为空。在下一个单元格中实现该函数。使用另一个测试您的实现。

实现一个函数ex2(f,g),接受两个函数f(x)和g(x),返回一个新的h(x)表示这两个函数的和。

 

在Julia中,x -> f(x) + g(x) 是一个匿名函数(Anonymous Function)或 Lambda 函数的表示方式。它定义了一个以 x 为参数的函数,该函数执行的操作是将 f(x)g(x) 相加。

具体来说,x -> f(x) + g(x) 表示一个函数,它接受一个参数 x,然后计算 f(x) + g(x) 的值,并返回这个值作为函数的结果。这允许你在不创建显式函数名称的情况下,定义一个临时的函数用于特定的计算。

在前面的例子中,我们使用 ex2 函数创建了一个新的函数 h,它的定义是 x -> f(x) + g(x),这意味着当你调用 h(x) 时,它将计算 f(x) + g(x) 的结果。这是一种非常灵活的方式来创建临时函数,特别适用于需要将函数作为参数传递或将函数作为返回值的情况。

 

标签:变量,可以,Julia,基础知识,参数,数组,函数
From: https://www.cnblogs.com/lbwBH/p/17758626.html

相关文章

  • kotlin基础知识
    一、if的使用1、if和java不一样的是:if是有结果的表达式函数的返回值可以是:returnif(a>b)aelseb;类似于java的returna>b?a:b;可能是这个原因所以kotlin没有这个三目运算符 二、函数体kotlin除了循环外,大部分控制结构都是表达式体1、函数体分为:代码块体和表......
  • Julia入门
    本次并行计算课程将使用Julia编程语言,与高性能计算HPC相关的课程通常使用C、C++或者Fortran语言,Julia是一种较为新的编程语言,专为科学计算而设计。它将类似python等解释用语言的高级语法与C等编译语言的性能相结合。因此,Julia允许我们使用在教学环境中方便的语法编写高效的并行算......
  • [C语言快速入门] 基础知识和基本数据类型
    [C语言快速入门]基础知识和基本数据类型这里主要的知识点主要来自这两个教学视频:史上最强最细腻的linux嵌入式C语言学习教程【李慧芹老师】_哔哩哔哩_bilibiliC语言基础入门_C3程序猿_哔哩哔哩_bilibili这本书:《CPrimerPlus(第6版)中文版》在本文开篇之前,想简单写一下关于......
  • 【20230613】【Python基础教程】第一章 基础知识
    第一章基础知识I1.4数字与表达python3.x会进行一些浮点数的计算点击查看代码print(1/2)#浮点计算print(1//2)#整除实现结果只保留整数部分print(1%2)#取余保留余数print(2**3)#幂函数结果如下:点击查看代码0.50181.4.1长整型数python3.x......
  • Docker容器基础知识
    Docker容器基础知识Docker是一个流行的用Go语言开发的开源项目,基于Linux内核的cgroup、namespace及AUFS等技术,对进程进行封装隔离,由Dotcloud公司开发。Docker已成为容器行业的事实标准。Docker是众多容器实现中最流行的技术,是容器技术的事实标准,其他知名的还有:rkt, Podman......
  • 逆向基础知识
    逆向基础知识1.逆向分析HelloWorld程序源码#include<Windows.h>#include<stdio.h>intmain(intaggc,TCHAR*argv[]){MessageBox(NULL,L"HelloWorld!",L"www.baidu.com",MB_OK);return0;}2.查找main函数......
  • Babel基础知识
    Babel中文官网Babel入门教程-阮一峰Babel博客教程-姜瑞涛Bilibili--系列Babel视频学习教学1.介绍1.1简介Babel是一个JavaScript编译器。Babel是一个工具链,主要用于将采用ECMAScript2015+语法编写的代码转换为向后兼容的JavaScript语法,以便能够运行在当前和旧......
  • 解题过程中的基础知识积累
    1、求任意进制:vector<int>vec;while(1){vec.push_back(m%n);//短除法求任意进制。if(m/n==0) break;m/=n;}2、枚举法求最大公约数://求sum与a的最大公约数。for(inti=a;i>=1;--i)//从最大数往前循环。{ if(sum%i==0&&a%i==0)//枚举......
  • 模块化基础知识
    1简介1.1模块将一个复杂的程序依据一定的规则(规范)封装成几个块(文件),并进行组合在一起。块的内部数据/实现是私有的,只是向外暴露一些接口(方法)与外部其它模块通信一个模块的组成:私有的数据:内部的变量私有的行为(操作数据):内部的函数向外暴露n个行为1.2模块......
  • js1之基础知识
    1简介1.1计算机语言计算机语言指用于人与计算机之间通讯的语言,它是人与计算机之间传递信息的媒介。总的来说,可以分成机器语言,汇编语言和高级语言三大类。实际上计算机最终所执行的都是机器语言,它是由“0”和“1”组成的二进制数,二进制是计算机语言的基础。0=000000001=00......