首页
学习
活动
专区
工具
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

- 从长度为m的int数组中随机取出n个元素,每次取的元素都是之前未取过的

题目:从长度为m的int数组中随机取出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.7K10
  • 实现一个二分搜索算法,搜索指定元素在已排序数组中的位置。(递归或者非递归实现)

    实现一个二分搜索算法,搜索指定元素在已排序数组中的位置。(递归或者非递归实现) 简介:实现一个二分搜索算法,搜索指定元素在已排序数组中的位置。...(递归或者非递归实现) 算法思路 算法思路 二分查找是一种在有序数组中查找特定元素的搜索算法。该算法对数组进行比较次数的上限是 O(log n)。...,在实现中我们使用递归方式进行查找。...重复执行这个过程,直到找到或确定不存在目标元素。 同时,递归方式的实现还需要注意满足递归退出条件。...("The index of " + x + " in array is: " + result); // 输出结果 } } 同样地,在Java中我们也使用递归方式进行查找。

    3500

    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 文档中的参考表中有文档。

    38310

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

    在执行矩阵运算时,你必须从令人眼花缭乱的各种库、数据类型甚至语言中进行选择。...通常,顶部的最高排序值是从堆中提取的,以便对列表进行排序。与树不同,大多数堆只是存储在数组中,元素之间的关系仅是隐式的。 堆叠 堆栈被定义为“先进后出”,一个元素被推到堆栈顶部,覆盖前一个元素。...队列在实时编程中非常有用,因此程序可以维护要处理的作业列表。集合由非重复元素的无序列表组成。如果您添加了一个已经在集合中的元素,则不会有任何更改。...更复杂的数据结构也可以由基本结构组成。考虑一个稀疏矩阵类。在稀疏矩阵中,大多数元素为零,并且仅存储非零元素。我们可以将每个元素的位置和值存储为三元组,并在可扩展数组中包含它们的列表。...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 位浮点随机变量方式的改变

    12810

    NumPy 1.26 中文文档(四十六)

    根据 self 中的整数值从 op 中的数组序列中选择元素创建一个新数组。这些数组必须都可以广播到相同的形状,而 self 中的条目应该在 0 和 len(op) 之间。...将来,用户可以依赖于从任何数组中读取时为非 NULL 值,尽管可能会为新创建的数组的写入保留异常(例如,在 ufunc 代码中的输出数组)。...根据self中的整数值,从op中的数组序列中选择元素,创建一个新数组。这些数组必须全部可以广播到相同的形状,并且self中的条目应在 0 和 len(op)之间。...根据self中的整数值从op的数组序列中选择元素创建一个新的数组。这些数组必须都能广播到相同的形状,并且self中的条目应在 0 和 len(op)之间。...对数组对象self中的非零元素的数量进行计数。 *PyArray_Nonzero( *self) 等同于ndarray.nonzero (self). 返回选择非零元素的self的索引数组元组。

    9210

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

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

    2.5K30

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

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

    1.3K00

    NumPy 1.26 中文官方指南(二)

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

    35410

    从Numpy中的ascontiguousarray说起

    这种命名方式是根据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.4K10

    NumPy 1.26 中文文档(五)

    通过索引等方式从数组中提取的项目由一个 Python 对象表示,其类型是 NumPy 中内置的数组标量类型之一。数组标量可以轻松操作更复杂的数据排列。...ndarray.searchsorted(v[, side, sorter]) 找到应将 v 的元素插入 a 以保持顺序的索引。 ndarray.nonzero() 返回非零元素的索引。...ndarray.searchsorted(v[, side, sorter]) 找到应将 v 的元素插入 a 中以保持顺序的索引。 ndarray.nonzero() 返回非零元素的索引。...ndarray.searchsorted(v[, side, sorter]) 找到元素的插入位置以维持顺序。 ndarray.nonzero() 返回非零元素的索引。...newbyteorder([new_order]) 使用不同的字节顺序返回相同数据的数组。 nonzero() 返回非零元素的索引。

    15410

    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

    78730

    每个数据科学家都应该知道的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.8K21

    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.7K10

    利用Numpy中的ascontiguousarray可以是数组在内存上连续,加速计算

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

    2K00

    NumPy 1.26 中文文档(四十五)

    建议仅以与编译器无关的方式指定那些 config_fc 选项 从源代码获取额外的 Fortran 77 编译器选项 一些旧的 Fortran 代码需要特殊的编译器选项才能正常工作。...— 克里斯·卡特(Chris Carter),《X 档案》 NumPy 提供了一个 C-API,使用户能够扩展系统并访问数组对象以在其他程序中使用。真正理解 C-API 的最佳方式是阅读源代码。...将vals中的项复制到in中,其中mask中的值为非零,如果nv 数组必须是连续的且行为良好。...无需失去精度地将vals中的项复制到in中,只需在mask中的值非零时,根据需要平铺vals,如果nv 数组都必须是连续的且规范化的。...将vals中的项目复制到in中,无论mask中的值是否为非零,在nv 的情况下需要按需平铺vals。所有数组必须是连续的且表现良好。

    13410
    领券