首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在Fortran中,从数组中随机选择非零元素的最佳方式是什么?

在Fortran中,从数组中随机选择非零元素的最佳方式是使用以下步骤:

  1. 遍历数组,记录非零元素的索引位置。
  2. 生成一个随机数,范围在1到非零元素的数量之间。
  3. 使用随机数作为索引,从记录的非零元素索引位置中选择一个。
  4. 获取该索引位置对应的非零元素。

这种方式可以确保从数组中随机选择一个非零元素,并且每个非零元素被选择的概率相等。

在Fortran中,可以使用以下代码实现上述步骤:

代码语言:txt
复制
program random_selection
  implicit none
  
  integer, parameter :: n = 10 ! 数组大小
  integer :: array(n) ! 数组
  integer :: non_zero_indices(n) ! 非零元素索引数组
  integer :: non_zero_count ! 非零元素数量
  integer :: random_index ! 随机索引
  integer :: selected_element ! 选择的非零元素
  
  ! 初始化数组
  array = [0, 1, 0, 2, 0, 3, 0, 4, 0, 5]
  
  ! 遍历数组,记录非零元素的索引位置
  non_zero_count = 0
  do i = 1, n
    if (array(i) /= 0) then
      non_zero_count = non_zero_count + 1
      non_zero_indices(non_zero_count) = i
    end if
  end do
  
  ! 生成随机数,范围在1到非零元素的数量之间
  call random_number(random_index)
  random_index = floor(random_index * non_zero_count) + 1
  
  ! 使用随机数作为索引,从非零元素索引位置中选择一个
  selected_element = array(non_zero_indices(random_index))
  
  ! 输出选择的非零元素
  write(*,*) "Selected element:", selected_element
  
end program random_selection

这段代码中,我们首先定义了一个大小为10的数组array,并初始化了一些非零元素。然后,我们遍历数组,记录非零元素的索引位置,并将其存储在non_zero_indices数组中。接下来,我们生成一个随机数random_index,并使用它作为索引从non_zero_indices中选择一个索引位置。最后,我们获取该索引位置对应的非零元素,并输出结果。

请注意,这只是一种从数组中随机选择非零元素的方式,具体的实现可能因实际需求而有所不同。对于更复杂的应用场景,可能需要考虑性能、算法复杂度等因素。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

列表数组随机抽取固定数量元素组成新数组或列表

列表数组随机抽取固定数量元素组成新数组或列表 1:python版本:python里面一行代码就能随机选择3个样本 >>> import random >>> mylist=list(range...个元素 >>> newlist [4, 7, 2] >>> newlist = random.sample(mylist, 3) #mylist随机获取3个元素 >>> newlist [4, 3..., 1] >>> newlist = random.sample(mylist, 3) #mylist随机获取3个元素 >>> newlist [5, 9, 3] >>> 2:jQuery版本...那么jQuery怎么随机选出固定数组数组[1, 2, 3, 4, 5, 6, 7, 8, 9]三个元素,并构造成新数组?...arr,随机返回num个不重复项 function getArrayItems(arr, num) { //新建一个数组,将传入数组复制过来,用于运算,而不要直接操作传入数组; var

6K10

- 长度为mint数组随机取出n个元素,每次取元素都是之前未取过

题目:长度为mint数组随机取出n个元素,每次取元素都是之前未取过 Fisher-Yates洗牌算法是由 Ronald A.Fisher和Frank Yates于1938年发明,后来被Knuth...等概率: 洗牌算法有些人也称等概率洗牌算法,其实发牌过程和我们抽签一样,大学概率论讲过抽签是等概率,同样洗牌算法选中每个元素是等概率。...用洗牌算法思路1、2、3、4、5这5个数随机取一个数 4被抽中概率是1/5 5被抽中概率是1/4 * 4/5 = 1/5 2被抽中概率是1/3 * 3/4 *..., Knuth 和 Durstenfeld Fisher 等人基础上对算法进行了改进,原始数组上对数字进行交互,省去了额外O(n)空间。...该算法基本思想和 Fisher 类似,每次从未处理数据随机取出一个数字,然后把该数字放在数组尾部,即数组尾部存放是已经处理过数字。

1.6K10

NumPy 1.26 中文官方指南(三)

NumPy 数组赋值通常存储为 n 维数组,只需要最小类型来存储对象,除非你指定维数和类型。NumPy 执行元素元素操作,所以用*来乘以 2D 数组不是矩阵乘法 - 这是元素元素乘法。...MATLAB 将任何值视为 1,并返回逻辑 AND。例如, NumPy (3 & 4)是0,而在 MATLAB 3和4都被视为逻辑真,(3 & 4)返回1。...索引:MATLAB 使用基于一索引,因此序列初始元素索引为 1。Python 使用基于索引,因此序列初始元素索引为 0。关于这一点可能会产生混淆和激烈争论,因为每种方式都有其优势和劣势。...使用 Meson 进行高级构建 Meson 支持标准环境变量CC,CXX和FC来选择特定 C、C++和/或 Fortran 编译器。这些环境变量Meson 文档参考表中有文档说明。...使用 Meson 进行高级构建 Meson 支持标准环境变量CC、CXX和FC来选择特定 C、C++和/或 Fortran 编译器。这些环境变量Meson 文档参考表中有文档。

22810

与机器学习算法相关数据结构

执行矩阵运算时,你必须令人眼花缭乱各种库、数据类型甚至语言中进行选择。...通常,顶部最高排序值是堆中提取,以便对列表进行排序。与树不同,大多数堆只是存储在数组元素之间关系仅是隐式。 堆叠 堆栈被定义为“先进后出”,一个元素被推到堆栈顶部,覆盖前一个元素。...队列实时编程中非常有用,因此程序可以维护要处理作业列表。集合由重复元素无序列表组成。如果您添加了一个已经集合元素,则不会有任何更改。...更复杂数据结构也可以由基本结构组成。考虑一个稀疏矩阵类。稀疏矩阵,大多数元素,并且仅存储元素。我们可以将每个元素位置和值存储为三元组,并在可扩展数组包含它们列表。...3乘3等式: image.png 结论 我所做大部分工作,我使用了很多基本固定长度数组。我使用复杂数据结构,使程序在运行方式和与外部世界接口方面更加流畅,也更方便用户使用。

2.4K30

NumPy 1.26 中文官方指南(四)

-1 维度入口中,指示 NumPy 选择长度,以保持数组元素总数不变。...相比之下,数组是包含精确一个值 ndarray 实例。 轴 数组维度另一个术语。轴从左到右编号;轴 0 是形状元组第一个元素二维矢量,轴 0 元素是行,轴 1 元素是列。...有两种类型适当连续 NumPy 数组Fortran 连续数组指的是以列方式存储数据,即存储在内存数据索引最低维开始; C 连续,或简单连续数组,指的是以行方式存储数据,即存储在内存数据索引最高维开始... Cython 修复了 NumPy C-API 错误处理 直接生成随机数生成器能力 numpy.logspace 现在支持非标量 base 参数 np.ma.dot() 现在支持...不再支持 Python 3.7 复杂数据类型 str/repr 现在在标点符号后包含空格 PCG64DSXM和PCG64纠正了advance 生成 32 位浮点随机变量方式改变

8210

Java面试题:Java集合及其继承关系

LinkedList使用双向链表实现存储(将内存内存单元通过附加引用关联起来,形成一个可以按序号索引线性结构,这种链式存储方式数组连续存储方式相比,内存利用率更高),按序号索引数据需要进行前向或后向遍历...List特征是其元素以线性方式存储,集合可以存放重复对象。 ArrayList() : 代表长度可以改变得数组。可以对元素进行随机访问,向ArrayList()插入与删除元素速度慢。...poll() 和 remove() 都是队列取出一个元素,但是 poll() 获取元素失败时候会返回空,但是 remove() 失败时候会抛出异常。...对于Map插入、删除和定位元素这类操作,HashMap是最好选择。然而,假如你需要对一个有序key集合进行遍历,TreeMap是更好选择。...Java.util.concurrent.BlockingQueue是一个队列,进行检索或移除一个元素时候,它会等待队列变为空;当在添加一个元素时,它会等待队列可用空间。

1.3K00

《利用Python进行数据分析·第3版》学习笔记1·准备环境

曾经不止一次听别人抱怨,pandas知识点分散、碎、不便于记忆。细节上,作者这次新版摒弃了许多容易造成记忆混乱用法。...NumPy提供了以下功能: 快速、高效多维数组对象ndarray。 用于对数组执行元素级计算以及直接对数组执行数学运算函数。 用于读写硬盘上基于数组数据集工具。...线性代数运算、傅里叶变换,以及随机数生成。 成熟C API, 用于Python插件和原生C、C++、Fortran代码存取NumPy数据结构和计算工具。 NumPy非常适合作为数据容器。...此外,由底层语言(比如C和Fortran)编写库可以直接操作NumPy数组数据,无需将数据复制到其他内存后再操作。...用于同时处理时间序列数据和时间序列数据统一数据结构。 算术运算和规约[ 译者注:规约是计算机科学降低计算复杂度方法统称。]可以保存元数据。 灵活处理缺失数据。

2.1K30

NumPy 1.26 中文官方指南(二)

访问元素时,请记住 NumPy 索引 0 开始。这意味着如果您要访问数组第一个元素,您将访问元素“0”。... Fortran ,移动二维数组元素时,第一个索引是变化最快索引。当第一个索引改变时,矩阵按列存储在内存中一列一列地变化。这就是为什么 Fortran 被认为是一种基于列语言。...当访问元素时,要记住 NumPy 索引 0 开始。 这意味着如果您要访问数组第一个元素,您将访问元素“0”。...数组通常是相同类型和大小项目的固定大小容器。 数组维数和项目数由其形状定义。数组形状是一组负整数元组,用于指定每个维度大小。 NumPy ,维度被称为轴。...基本上,C 和 Fortran 排序与索引与数组在内存存储顺序相对应有关。 Fortran ,当在内存中移动二维数组元素时,第一个索引是最快变化索引。

12510

Numpyascontiguousarray说起

这种命名方式是根据C语言和Fortran语言中数组在内存存储方式不同而来。Pascal, C,C++,Python都是行优先存储,而Fortran,MatLab是列优先存储。 3....如果想要向下移动一列,则只需要跳过3个块既可(例如,0到4只需要跳过1,2和3)。 上述数组转置arr.T则没有了C连续特性,因为同一行相邻元素现在并不是在内存相邻存储了: ?...这时候arr.T变成了Fortran 连续Fortran contiguous),因为相邻列元素在内存相邻存储了。...性能上来说,获取内存相邻地址比不相邻地址速度要快很多(RAM读取一个数值时候可以连着一起读一块地址数值,并且可以保存在Cache)。这意味着对连续数组操作会快很多。...补充 Numpy随机初始化数组默认都是C连续,经过不规则slice操作,则会改变连续性,可能会变成既不是C连续,也不是Fortran连续

1.3K10

Numpy 多维数据数组实现

它是C和Fortran创建,因此当计算被矢量化(用矩阵和矢量表示操作)时,性能很高。...由于动态类型原因,Python中用list实现这种操作并不是很有效。 Numpy数组是静态类型化和同质化元素类型是创建数组时定义(那么数组数据类型可以改变)。...4.3numpy数组其他属性 M.itemsize#每个byte单元数 M.nbytes#byte数目 M.ndim#单位数,计数 5.使用数组 5.1编制索引 你可以使用方括号和索引来选择数组元素...低于指数数组末端开始计算。 A = array([1,2,3,4,5]) A[-1]#最后一个元素 A[-3:]#最后三个元素 索引分区也适用于多维数组。...这个函数对于根据某些条件数组选择元素非常有用。 x = arange(0, 10, 0.5) x ? mask = (5 < x) * (x < 7.5) mask ? x[mask] ?

6.4K30

Python数据分析库介绍及引入惯例

作为算法和库之间传递数据容器。对于数值型数据,NumPy数组存储和处理数据时要比内置Python数据结构高效得多。...此外,由低级语言(比如C和Fortran)编写库可以直接操作NumPy数组数据,无需进行任何数据复制工作。 因此,许多Python数值计算工具使用NumPy数组作为主要数据结构。...scipy.special:SPECFUN(这是一个实现了许多常用数学函数(如伽玛函数)Fortran库)包装器。...scikit-learn 2010年诞生以来,scikit-learn成为了Python通用机器学习工具包。 子模块包括: 分类:SVM、近邻、随机森林、逻辑回归等等。...常见引入惯例 最佳引入方式如下: import numpy as np import matplotlib.pyplot as plt import pandas as pd import seaborn

77130

每个数据科学家都应该知道20个NumPy操作

无论数据采用何种格式,都需要将其转换为一组待分析数字。因此,有效地存储和修改数字数组在数据科学至关重要。...浮点数0和1之间一维数组。可以用于创建随机噪声数据。 3. 一个标准正态分布样本 randn()用于从一个标准正态分布(即均值和单位方差)创建一个样本。 ?...Arange Arange函数用于指定时间间隔内创建具有均匀间隔顺序值数组。我们可以指定起始值、停止值和步长。 ? 默认起始值是,默认步长是1。 ? 7....如果我们一个6x3数组上应用hsplit得到3个子数组,得到数组形状将是(6,1)。 ? 数组合并 某些情况下,我们可能需要组合数组。NumPy提供了以多种不同方式组合数组函数和方法。...Eig 计算一个方阵特征值和右特征向量。 ? 19. 点积 计算两个向量点积,这是关于它们位置元素乘积和。第一个向量第一个元素乘以第二个向量第一个元素,以此类推。 ? 20.

2.4K20

牛!NumPy团队发了篇Nature

数组只有一种数据类型,并且数组每个元素在内存占用相同数量字节。...Strides是将线性存储元素计算机内存解释为多维数组所必需,描述了在内存向前移动字节数,以便行跳到行,列跳到列等等。...这会产生简洁代码,使用户能够专注于分析细节,而NumPy则以近乎最佳方式处理数组元素循环-例如,考虑跨度以最大限度地利用计算机高速缓存内存。...特别值得一提是,EHT合作小组利用这个库首次对黑洞进行成像。eht-imaging,NumPy阵列用于存储和操作处理链每一步数字数据:原始数据到校准和图像重建。...SciPy和PyData/Sparse都提供稀疏数组,这些稀疏数组通常包含很少值,并且为了提高效率,只将这些值存储在内存。此外,还有一些项目将NumPy数组构建为数据容器,并扩展其功能。

1.7K21

利用Numpyascontiguousarray可以是数组在内存上连续,加速计算

译文 所谓contiguous array,指的是数组在内存存放地址也是连续(注意内存地址实际是一维),即访问数组下一个元素,直接移动到内存下一个地址就可以。...这个数组看起来结构是这样:   计算机内存里,数组arr实际存储是像下图所示:   这意味着arr是C连续(C contiguous),因为在内存是行优先,即某个元素在内存下一个位置存储是它同行下一个值...上述数组转置arr.T则没有了C连续特性,因为同一行相邻元素现在并不是在内存相邻存储了:   这时候arr.T变成了Fortran 连续Fortran contiguous),因为相邻列元素在内存相邻存储了...性能上来说,获取内存相邻地址比不相邻地址速度要快很多(RAM读取一个数值时候可以连着一起读一块地址数值,并且可以保存在Cache),这意味着对连续数组操作会快很多。...补充 Numpy随机初始化数组默认都是C连续,经过不规则slice操作,则会改变连续性,可能会变成既不是C连续,也不是Fortran连续

1.8K00

NumPy 基础知识 :1~5

这是因为, C 数组,一行元素被放置连续内存位置。 对于 Fortran 数组,情况恰好相反,其中列元素布置连续内存位置。..., False], dtype=bool) 从前面的示例,我们可以深入了解 NumPy 元素操作,但是使用它们好处是什么?...同样,**功率符号以矩阵方式完成。 我们还根据随机函数创建了一个矩阵z,以显示该矩阵何时可逆(奇异)。 您可以使用numpy.matrix.I获得逆矩阵。...,sigma是A奇异值(AA-1和A-1A特征值)。...但是, NumPy 返回sigma是具有数组,我们需要将其设为向量,因此在此示例,形状为(3, 3)。 我们首先使用numpy.diag()制作sigma对角矩阵diag_sigma。

5.5K10

与机器学习算法有关数据结构

进行矩阵算术时,将不得不从令人眼花缭乱各种库,数据类型甚至语言中进行选择。许多科学编程语言,例如Matlab,交互数据语言(IDL)和带有Numpy扩展Python,主要用于处理向量和矩阵。...当取下一个元素时,两个子元素中越大元素被提升到缺失位置,那么这两个子元素更大元素就会被提升等等,直到所有的元素都排到了正确位置上。...通常情况下,顶部排名最高值将从堆取出,以便对列表进行排序。与树不同,大多数堆只是简单地存储一个数组元素之间关系也只是隐含。 栈 一个堆栈被定义为“先进后出”。...元组 一个集合包含一个重复元素无序列表。如果添加已经该集合元素,则不会有任何更改。由于机器学习大部分数学涉及集合,它们是非常有用数据结构。...稀疏矩阵,大部分元素都是,只有元素被存储。我们可以将每个元素位置和值存储为一个三元组,并将它们列表存储一个可扩展数组

2.1K70

Matlab C混合编程

用C++(或者C)语言操作MATLAB,有三种途径: MEX文件 MATLAB可调用C或Fortran语言程序称为MEX文件。MATLAB可以直接把MEX文件视为它内建函数进行调用。...MATLAB引擎程序指的是那些通过管道(UNIX系统)或者ActiveX(Windows系统)与独立MATLAB进程进行通信C/C++或者Fortran程序。...它是稀疏矩阵不为元素个数。 ir指向一个长度为nzmax整型数阵列,阵列包含是pr和pi对应元素行号。 jc指向一个长度为N+1整型数阵列(N为矩阵列数),其中包含是列号信息。...对于任意j,如果0≤j≥N-1,jc[j]是第j列第一个ir、pr(以及pi)序号,jc[j+1]-1是第j列最后一个序号。因此jc[N]总等于nnz——矩阵中非总个数。...如果nnz小于nzmax,可以继续向矩阵添加项而无需分配额外存储空间< 4、主要函数举例: ·MATFile *matOpen(const char *filename, const char

1.4K20

算法可视化:把难懂代码画进梵高星空

注意,也没有采样点彼此太接近;这是定义由算法实施泊松盘分布最小距离约束。 这就是它工作原理: ? 红点表示“活跃”采样点。每次迭代所有活跃采样点集合随机选择一个。...该算法把数组划分为两个部分,右半边是已洗牌区域(用黑色表示),左半边是待洗牌区域(用灰色表示)。每一步左边待洗牌区域随机选择一个元素并将其移动到右侧,已洗牌区域元素数量扩大了1个。...比较器定义元素顺序。它使用参数a和b (要比较数组两个元素),如果a小于b,则返回小于值,如果a大于b,则返回大于值,如果a和b相等,则返回0。比较器排序期间重复调用。...Quicksort首先通过选择一个基准将数组分成两个部分。 左半部包含所有小于基准元素,而右半部包含大于基准所有元素。在数组分区后,快速排序左右两部分内递归。...每个步骤,随机挑选这些可能扩展一个,只要这不重新连接它与另一个部分迷宫,该迷宫就会延伸扩展。 像Bridon泊松盘采样算法一样,随机遍历保持前沿,并从边界随机选择进行扩展。

1.5K40
领券