标签: scilab

如何将布尔数组转换为int数组

我使用Scilab,并希望将一个布尔数组转换为一个整数数组:

>>> x = np.array([4, 3, 2, 1])
>>> y = 2 >= x
>>> y
array([False, False,  True,  True], dtype=bool)
Run Code Online (Sandbox Code Playgroud)

在Scilab中我可以使用:

>>> bool2s(y)
0.    0.    1.    1.  
Run Code Online (Sandbox Code Playgroud)

或者甚至只是乘以1:

>>> 1*y
0.    0.    1.    1.  
Run Code Online (Sandbox Code Playgroud)

在Python中是否有一个简单的命令,或者我是否必须使用循环?

python integer boolean type-conversion scilab

107
推荐指数
5
解决办法
19万
查看次数

MATLAB比SCILAB有什么优势,反之亦然?

我是一名计算机系统工程本科生,我只是想知道MATLAB与SCILAB相比有什么优势,反之亦然,而SCILAB是免费软件.我的意思是从计算机工程师的角度来看.

谢谢

matlab scilab

12
推荐指数
3
解决办法
7026
查看次数

按字符串名称访问变量

我需要将实验数据加载到scicoslab中,这是一个(设计很糟糕的)scilab克隆,它恰好支持图形建模.网络上的文档相当差,但它与scilaboctave相似.

我需要处理的数据包含到一定数量的文本文件:Data_005,Data_010,..., Data_100.可以使用命令的-ascii标志加载它们中的每一个loadmatfile.

问题来自loadmatfile("foo", "-ascii")将文件加载foo.mat到名为的变量的事实foo.为了循环数据文件,我需要做类似的事情:

for i = [5:5:100]
    name = sprintf("Data_%02d", i);
    loadmatfile(name, "-ascii");
    x = read_var_from_name(name);
    do_something(x);
end
Run Code Online (Sandbox Code Playgroud)

我搜索的是内置的read_var_from_name,它允许我通过字符串访问内部符号表.

你知道是否存在类似的功能吗?

笔记:

  1. 如果您的文件是ascii格式,则无法覆盖此行为;
  2. 在这个阶段,我也可以使用八度音阶(不涉及图形建模),尽管它的行为方式相同.

matlab octave scilab

11
推荐指数
2
解决办法
2万
查看次数

如果两种语言遵循IEEE 754,两种语言的计算会产生相同的答案吗?

我正在将程序从Scilab代码转换为C++.特别是一个循环产生的结果与原始的Scilab代码略有不同(这是一段很长的代码,因此我不会在问题中包含它,但我会尽力总结下面的问题).

问题是,循环的每一步都使用上一步的计算.此外,计算之间的差异仅在第100,000次迭代(大约300,000次)中变得明显.

注意:我正在使用"format(25)"将我的C++程序的输出与Scilab 5.5.2的输出进行比较.命令.含义我正在比较25位有效数字.我还想指出,我理解在一定数量的位之后无法保证精度,但在评论之前阅读下面的部分.到目前为止,两种语言之间的所有计算都相同,最多可达25位.

为了找到问题的根源,到目前为止我已经尝试过:

  1. 检查正在使用的数据类型:

我已经设法确认Scilab正在使用IEEE 754双打(根据语言文档).另外,根据维基百科,C++ 并不需要使用IEEE 754双打,但我可以告诉,我到处使用双C++中它已完全匹配的Scilab的结果.

  1. 检查超越函数的使用:

我还读过每个计算机科学家应该知道的关于浮点运算的内容,IEEE不要求超越函数完全舍入.考虑到这一点,我在两种语言中比较了这些函数的结果(sin(),cos(),exp()),结果看起来是相同的(最多25位).

  1. 使用其他功能和预定义值:

我重复了上述步骤,以便使用sqrt()和pow().以及Pi的值(我在C++中使用M_PI,在Scilab中使用%pi).同样,结果是一样的.

  1. 最后,我重写了循环(非常仔细),以确保两种语言之间的代码相同.

注意:有趣的是,我注意到,对于上述所有计算,两种语言之间的结果与计算的实际结果(浮点运算之外)相匹配得更远.例如:

使用Wolfram Alpha = sin(x)的值= 0.123456789 .....

使用Scilab&C++ = sin(x)的值= 0.12345yyyyy .....

甚至一旦使用Scilab或C++计算的值开始与实际结果不同(来自Wolfram).每种语言的结果仍然相互匹配.这使我相信大多数值都以相同的方式计算(在两种语言之间).即使IEEE 754不要求它们.


我最初的想法是上述前三点之一,两种语言之间的实现方式不同.但据我所知,一切似乎都会产生相同的结果.

是否有可能即使这些循环的所有输入都相同,结果也可能不同?可能是因为一个非常小的错误(过去我能看到的25位数)正在发生,随着时间累积?如果是这样,我该如何解决这个问题呢?

c++ floating-point precision rounding-error scilab

10
推荐指数
2
解决办法
367
查看次数

在Scilab上使用MATLAB代码

可以在Scilab上使用MATLAB代码吗?当说Scilab是MATLAB的"克隆"时,这是什么意思?

matlab scilab

8
推荐指数
2
解决办法
2万
查看次数

如何在Octave或Scilab中使用并行'for'循环?

我在Matlab代码中运行了两个for循环.内部循环使用Matlabpool在12个处理器中进行并行化(这是Matlab在单个机器中允许的最大值).

我没有分布式计算许可证.请帮我使用Octave或Scilab如何做到这一点.我只想将'for'循环并行化.

当我在谷歌搜索它时,有一些断开的链接.

parallel-processing matlab octave scilab

7
推荐指数
2
解决办法
9287
查看次数

找到球体中所有点阵的最佳方法

给定一堆任意向量(存储在矩阵A中)和半径r,我想找到落在半径r球内的那些向量的所有整数值线性组合.然后我将存储在矩阵V中的必要坐标.例如,如果是线性组合

K=[0; 1; 0]
Run Code Online (Sandbox Code Playgroud)

在我的球体内部,即类似的东西

if norm(A*K) <= r then
   V(:,1)=K
end
Run Code Online (Sandbox Code Playgroud)

等等

A中的向量肯定是给定晶格的最简单可能的基础,最大的向量将具有长度1.不确定是否以任何有用的方式限制向量但我怀疑它可能. - 他们不会像不太理想的基础那样有相似的指示.

我已经尝试了一些方法,但没有一个看起来特别令人满意.我似乎无法找到一个漂亮的模式来穿越晶格.

我目前的方法涉及从中间开始(即所有0的线性组合)并逐个经过必要的坐标.它涉及存储一堆额外的矢量来跟踪,所以我可以遍历坐标的所有八分圆(在3D情况下)并逐个找到它们.这个实现看起来非常复杂并且不够灵活(特别是它似乎不容易推广到任意数量的维度 - 虽然这对于当前目的来说并不是绝对必要的,但它是一个很好的选择)

有没有一个很好的方法来找到所有必需的点?

(*理想情况下既高效又优雅**.如果真的有必要的话,在球体之外有一些额外的点数并不重要,但最好不要那么多.我绝对需要球体内的所有向量. - 如果它有很大的不同,我对3D案例最感兴趣.

**我很确定我当前的实现都不是.)


我发现类似的问题:

找到围绕任意坐标的半径为r的球体中的所有点 - 这实际上是比我正在寻找的更普遍的情况.我只处理周期性格子,我的球体总是以0为中心,与格子上的一个点重合.但我没有一个点列表,而是一个矢量矩阵,我可以用它来生成所有点.

如何有效地枚举n维网格中的所有球体点 - 完全规则的超立方格子和曼哈顿距离的情况.我正在寻找完全任意的格子和欧氏距离(或者,为了效率目的,显然是正方形).

algorithm scilab mathematical-lattices

6
推荐指数
1
解决办法
1237
查看次数

没有matlab提取.mat数据 - 尝试了scilab失败

我已经下载了一个我感兴趣的数据集.但是,它是.mat格式的,我无法访问Matlab.

我做了一些谷歌搜索,它说我可以在SciLab中打开它.

我尝试过一些东西,但是我没有找到任何好的教程.

我做到了

fd = matfile_open("file.mat")

matfile_listvar(FD)

并打印出没有扩展名的文件名.我试过了

var1 = matfile_varreadnext(fd)

那只是给了我"var1 ="

我真的不知道数据的组织方式.存储库描述了它包含的数据,但不描述它的组织方式.

所以,我的问题是,在提取/查看这些数据时我做错了什么?我没有致力于SciLab,如果有更好的工具,我对此持开放态度.

matlab scilab

5
推荐指数
1
解决办法
8891
查看次数

exec命令的scilab问题

我正在使用Scinote 5.4.0和OSX 10.7.4.我无法使用exec("path")命令从控制台执行脚本文件; 当我这样做时,只读取脚本文件的第一行.

例:

-->exec("plot1.sce") 
-->x=[0:.1:10]'; //(the first line of my code)
Run Code Online (Sandbox Code Playgroud)

但是,如果我从编辑器Scinote"执​​行echo",脚本将运行正常.

有人知道发生了什么吗?(我尝试运行的脚本文件位于我目前的工作目录中).

谢谢!

更新:我刚刚在同一台机器上安装了Scilab,同样的事情正在发生.

更新:Per Scilab的bugtracker,它似乎是由Scinote在mac上违约造成的.我真的不知道这意味着什么或如何解决它,但冒险仍在继续!

更新:我找到了解决方案!:http://comments.gmane.org/gmane.comp.mathematics.scilab.user/6184

在首选项中,我将eol更改为Unix,并将默认文件编码更改为iso-8859-1.我重新启动,exec现在正在工作!

scilab

5
推荐指数
1
解决办法
2254
查看次数

完全图的最大加权配对算法

数学问题

2n个人,C(i,j)ij一起工作的"成本" (函数C快速计算,在我的例子中它是一个给定的矩阵,并且是对称的).问题是找到2n对人的安排,最小化每对人的成本之和.

这应该在n中的多项式复杂度中完成,并且在Scilab语言中相对容易地实现(输入:成本矩阵,输出:配对,例如n -by-2索引矩阵).我知道"相对容易"需要解释......

以前的研究

这个问题实际上是由Blossom算法解决的.例如,参见本文.

然而,这个(及其变体)看起来像是一个噩梦.我真正的问题是n = 20,所以虽然蛮力(=尝试所有可能的配对)不行(暴力强迫n = 8花了一个小时在我的电脑上),几乎任何比蛮力更好的应该做的伎俩; 如果我能以一小时的计算成本避免一周的编码.

我正在考虑在2n- by- 2n阵列上使用匈牙利/ Munkres算法,用对称成本矩阵填充对角线和其他元素,然后以某种方式从结果置换中选择相关的配对,但我找不到一个可靠的方法来做到这一点.(注意,匈牙利语算法已经编码为单独的部分,因此您可以免费使用它来实现"易于实现"的要求.)+%inf

我希望与开花算法问题相比,图的完整性允许一些捷径...... (编辑:请参阅下面的DE评论,由于半明显的原因,这是错误的)

algorithm scilab matching graph-algorithm

5
推荐指数
1
解决办法
656
查看次数