使用 Mojo 中的 Mandelbrot 和 Python 绘图

embedded/2024/9/24 6:17:44/

Mojo不仅非常适合编写高性能代码,而且还允许我们利用庞大的Python生态系统中的库和工具。通过无缝的Python互操作性,Mojo可以使用Python来做它擅长的事情,特别是gui,而不会牺牲关键代码的性能。让我们使用经典的Mandelbrot集合算法并在Mojo中实现它。

本教程展示了Mojo的两个方面。首先,证明了Mojo可以为非规则应用开发快速程序;它还展示了如何利用Python来可视化结果。

import benchmark
from math import iota
from sys import num_physical_cores
from algorithm import parallelize, vectorize
from complex import ComplexFloat64, ComplexSIMD
from python import Pythonalias float_type = DType.float32
alias int_type = DType.int32
alias simd_width = 2 * simdwidthof[float_type]()
alias unit = benchmark.Unit.ms

首先设置一些参数,你可以尝试更改它们以查看不同的结果:

alias width = 960
alias height = 960
alias MAX_ITERS = 200alias min_x = -2.0
alias max_x = 0.6
alias min_y = -1.5
alias max_y = 1.5

下面我们定义一个简单的矩阵结构体:

@value
struct Matrix[type: DType, rows: Int, cols: Int]:var data: DTypePointer[type]fn __init__(inout self):self.data = DTypePointer[type].alloc(rows * cols)fn __getitem__(self, row: Int, col: Int) -> Scalar[type]:return self.data.load(row * cols + col)fn store[width: Int = 1](self, row: Int, col: Int, val: SIMD[type, width]):self.data.store[width=width](row * cols + col, val)

曼德尔布罗特算法的核心是为每个像素计算一个迭代的复函数,直到它“逃离”半径为2的复圆,并计算逃离的迭代次数:
在这里插入图片描述

# Compute the number of steps to escape.
def mandelbrot_kernel(c: ComplexFloat64) -> Int:z = cfor i in range(MAX_ITERS):z = z * z + c

http://www.ppmy.cn/embedded/92890.html

相关文章

Spring有5种自动装配方式,其中autodetect默认使用?

Spring有5种自动装配方式,其中autodetect默认使用? A. 构造函数装配 B. 类型装配 C. setter装配 D. byName装配 选择A Spring框架提供了5种自动装配模式,主要是用在依赖注入的场景中。 no:这是默认值,表示不使用自动装…

JavScript函数知识点全面汇总,重磅来袭!

你好同学,我是沐爸,欢迎收藏、点赞和关注!个人知乎 JavaScript中的函数是一个核心概念,它涵盖了多个知识点,这些知识点对于理解和使用JavaScript至关重要。 以下是对JavaScript函数涉及的主要知识点的全面汇总&#xf…

正则采集器之六——商品管理

将采集到的商品保存到数据库中并在后台系统展示,接下来讲解后端和前端代码。 后端 mapper类: package com.learn.reptile.mapper;import org.apache.ibatis.annotations.Mapper;import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.…

常见框架漏洞

thingphpv5 /index.php 漏洞利用 漏洞根本源于 thinkphp/library/think/Request.php 中method方法可以进行变量覆盖,通过覆盖类的核心属性filter导致rce,其攻击点较为多,有些还具有限制条件,另外由于种种部分原因,在…

模型实战(25)之 基于LoFTR深度学习匹配算法实现图像拼接

模型实战(25)之 基于LoFTR深度学习匹配算法实现图像拼接 图像拼接在全景图、大图或者多目场景下经常会被使用,常用的方法有传统图像处理算法和深度学习直接获取对应点的算法传统图像处理算法过程繁琐,阈值少且整体算法结果对调参比较敏感,其主要通过形状、特征点等描述子对…

Stable Diffusion 使用详解(7)---AI 摄影

目录 背景 底模的选择 例子 majicMix GirlFriendMix( Lora) 对比效果 LEOSAMs MoonFilm ADetailer 使用 说明 例子 问题 处理方式 效果 背景 魔法师使用魔法作的画有时候太过完美,以至于有点脱离真实摄影的感觉,我们…

(MTK)java文件添加简单接口并配置相应的SELinux avc 权限笔记2

文章简介 承接上一篇笔记,该份笔记是笔者深思熟虑后根据实战应用所总结出来的精华内容,该文章内容主要包括配置avc权限的使用场景以及其上下环节所需的准备。 使用场景 1.底层驱动有无配置好相应的串口 2.开启相应的selinux avc 权限 3.在framework…

v 3 + vite + ts 自适应布局(postcss-pxtorem)

1、 当pc端、移动端H5等项目中,需要根据当前浏览器窗口或屏幕尺寸,来自适应的改变页面内元素尺寸时,就可以借助下述插件和相关配置来实现。 2、适用范围:vue3 vite ts 步骤一:相关依赖下载下载相关依赖 npm inst…