小编Tas*_*nou的帖子

如何在julia中创建一个"单一调度,面向对象的类",其行为类似于具有公共/私有字段和方法的标准Java类

我在一本书中读到"你不能用julia创造传统'课程',采用单调度方式,比如obj.myfunc()"......我认为听起来更像是挑战而不是事实.

所以这是我的JavaClass公共/私人领域和方法的类型,仅仅是为了在朱莉娅有一些像丑陋这样丑陋的冲击和恐怖因素,在开发人员为避免它而烦恼之后:

type JavaClass

    # Public fields
    name::String

    # Public methods
    getName::Function
    setName::Function
    getX::Function
    getY::Function
    setX::Function
    setY::Function

    # Primary Constructor - "through Whom all things were made."
    function JavaClass(namearg::String, xarg::Int64, yarg::Int64)

        # Private fields - implemented as "closed" variables
        x = xarg
        y = yarg

        # Private methods used for "overloading"
        setY(yarg::Int64) = (y = yarg; return nothing)
        setY(yarg::Float64) = (y = Int64(yarg * 1000); return nothing)

        # Construct object
        this = new()
        this.name = namearg …
Run Code Online (Sandbox Code Playgroud)

oop single-dispatch julia

14
推荐指数
1
解决办法
1602
查看次数

地图,在朱莉娅用`|>`减少

在R中,dyplr您拥有%>%允许您将函数输出传递给新函数的运算符,从而无需存储中间值.在julia中,您可以通过使用|>运算符实现非常相似的功能.

用法示例

2 |> log |> sqrt 
Run Code Online (Sandbox Code Playgroud)

对我而言,这比阅读更好sqrt(log(2)).特别是当链条变得很长时.我想用这个语法,但也对map,reduce型功能朱莉娅.

建立

from = "abcdefghijklmnopqrstuvwxyz"
to   = "cdefghijklmnopqrstuvwxyzab"
trans = "g fmnc wms bgblr rpylqjyrc gr zw fylb <>"
d = {from[i] => to[i] for i = 1:26}
d[' '] = ' '
Run Code Online (Sandbox Code Playgroud)

什么有效

map(x -> d[x], filter(x -> isalpha(x) || isspace(x), trans))
Run Code Online (Sandbox Code Playgroud)

这样可行,但它读起来并不像我希望的那样好.另一种方法是将中间结果存储到变量中,但这似乎也很冗长:

res1 = filter(x -> isalpha(x) || isspace(x), trans)
map(x -> d[x], res1)
Run Code Online (Sandbox Code Playgroud)

我更喜欢什么

R语法与此类似:

trans |> 
  filter(x …
Run Code Online (Sandbox Code Playgroud)

julia

12
推荐指数
2
解决办法
2565
查看次数

如何在朱莉娅中找到现有的功能"别名"?

把事情放到上下文中:

a)在朱莉娅,人们可以通过做"foo" n次重复串repeat("foo",n).

我试图找出是否为此定义了一个"符号运算符"别名(这里更广泛地使用了"别名"),因为我怀疑可能会有,我发现它是"foo" ^ n通过检查文件在哪里repeat(::String,::Integer)定义的(types.jl); ^在下面明确定义,它基本上是一个包装器repeat.

  • 有了这些知识,我输入less(^, (String,Int64))了REPL来确认,这确实把我带到了同一个文件和行.
  • 如果我输入^REPL,我会得到^ (generic function with 47 methods)

b)×是一个别名cross,即调用[1.,2.,3.] × [1.,2.,3.],cross([1.,2.,3.],[1.,2.,3.])似乎是等价的,并is(×,cross)返回true.

  • 如果我输入×终端,我得到cross (generic function with 1 method);
  • 如果我打字less(×,(AbstractVector,AbstractVector)),它会直接找到一个定义cross,而不是一个明确的定义×;
  • 有点"grepping"后,我发现定义const × = crosssysimg.jl.

问题1:是否有一种更简单的编程方式来检查函数是否定义了别名?即是否有一个相同的概念:

julia> findaliases(cross)
  result: [×]
Run Code Online (Sandbox Code Playgroud)

(我试过匹配 …

alias julia

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

用于编辑numpy数组的一行解决方案?(蟒蛇)

我想制作一个numpy数组,其中包含在特定位置发生的值(1-3之间)的次数.例如,如果我有:

a = np.array([[1,2,3], 
              [3,2,1], 
              [2,1,3], 
              [1,1,1]])
Run Code Online (Sandbox Code Playgroud)

我想像这样回来一个数组:

[[[ 1  0  0]
  [ 0  1  0]
  [ 0  0  1]]

 [[ 0  0  1]
  [ 0  1  0]
  [ 1  0  0]]

 [[ 0  1  0]
  [ 1  0  0]
  [ 0  0  1]]

 [[ 1  0  0]
  [ 1  0  0]
  [ 1  0  0]]]
Run Code Online (Sandbox Code Playgroud)

数组告诉我1在第一个位置发生一次,2个在第二个位置发生一次,3个在第三个位置发生一次,1个在第四个位置发生一次,等等.后来,我将有更多的输入数组相同的维度,我想在这个计数数组中添加值的总和.

我现在的代码是:

a = np.array([[1,2,3],
              [3,2,1],
              [2,1,3],
              [1,1,1]])

cumulative = np.zeros((4,3,3))

for r in range(len(cumulative)):
    for c in range(len(cumulative[0])):
        cumulative[r, c, a[r,c]-1] +=1
Run Code Online (Sandbox Code Playgroud)

这确实给了我想要的输出.但是,我想将for循环压缩成一行,使用类似于这样的行: …

python arrays numpy

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

Matlab/Octave 中的正规方程和 pinv()

我正在研究机器学习的基础知识,当我阅读有关 Matlab 中正规方程的使用时,我有一个问题。

如果正规方程为:

伪逆,所以:

pinv(X) 计算 的伪逆X

为什么在 Matlab/Octave 中,有些人使用:

theta = pinv(X'*X)*X'*y ...(4)
Run Code Online (Sandbox Code Playgroud)

代替

theta = pinv(X)*y ...(5)
Run Code Online (Sandbox Code Playgroud)

(4)不是多余的吗?不pinv(X)帮我们计算伪逆公式吗?

谢谢你!

matlab matrix octave matrix-inverse

5
推荐指数
0
解决办法
623
查看次数

如何在numpy中有效地实现x [i] [j] = y [i + j]?

x为具有(A,B)形状的矩阵,并且y为具有A + B-1大小的阵列.

for i in range(A):
    for j in range(B):
        x[i][j] = y[i+j]
Run Code Online (Sandbox Code Playgroud)

如何使用numpy中的函数有效地实现等效代码?

python numpy

4
推荐指数
1
解决办法
187
查看次数

Octave JIT编译器.当前状态,以及演示效果的最小示例

我听到有关Octave的实验性JIT编译器功能的非常矛盾的信息,从"它是一个玩具项目,但它基本上不起作用"到"我已经使用它并且我获得了显着的加速".

我知道为了成功使用它需要

  • 使用--enable-jitat configure时编译八度音程
  • 使用该--jit-compiler选项启动八度音程
  • 使用jit_enablejit_startcnt命令在运行时指定jit编译首选项

但我无法令人信服地再现这些效果; 不确定这是因为我错过了我不知道的任何其他步骤,或者它对我的机器没有太大影响.

问:使用该功能的人是否可以成功提供最小的工作示例,证明其正确使用及其在机器上的效果(如果有)?

jit octave

3
推荐指数
1
解决办法
2009
查看次数

为什么在这些julia函数中不遵守常量?

Lyndon今天早些时候提出问题提示:

一个.

julia> function f1(x::Float64) 
         const y = x;
         y = "This should throw an error since y is of constant type";
         return y;
       end
f1 (generic function with 1 method)

julia> f1(1.0)
"This should throw an error since y is of constant type"
Run Code Online (Sandbox Code Playgroud)

为什么const关键字在这里没有按预期工作?(即,禁止指定y已声明为的字符串const).

julia> function f2(x::Float64)
         show(x);
         const x = 1.;
       end
f2 (generic function with 1 method)

julia> f2(1.0)
ERROR: UndefVarError: x not defined
Stacktrace:
 [1] f2(::Float64) …
Run Code Online (Sandbox Code Playgroud)

const strong-typing julia

3
推荐指数
1
解决办法
288
查看次数

标准库预定义的"用户定义"文字"m"在哪里定义?

我在浏览C++ Core Guidlines文档时偶然发现了以下示例:

change_speed(double s);   // bad: what does s signify?
// ...
change_speed(2.3);
Run Code Online (Sandbox Code Playgroud)

一个更好的方法是明确双重的意义(旧速度的新速度或增量?)和使用的单位:

change_speed(Speed s);    // better: the meaning of s is specified
// ...
change_speed(2.3);        // error: no unit
change_speed(23m / 10s);  // meters per second
Run Code Online (Sandbox Code Playgroud)

我们本可以接受一个普通(无单位)双精度作为delta,但这很容易出错.

关于最后一行代码,在该特定页面上没有提到该语法的含义,它看起来对我来说是陌生的.

经过几个小时的浪费投入搞清楚这可能是一个预定义的"用户定义"文字的标准库,并且更多地了解它们,我试图找出这个特定文字的定义,但是这里提到 's' 和少数几个其他文字,我没有找到关于'm'的信息.

关于SO 还有这个问题,但我认为那里的答案似乎已经完全过时了.

问:标准库预定义的用户定义文字"m"在哪里定义*?


*甜美,甜蜜的头韵.

c++ units-of-measurement c++-standard-library

3
推荐指数
1
解决办法
108
查看次数

朱莉娅浮点数比较为零

julia> r
3×3 Array{Float64,2}:
 -1.77951  -0.79521   -2.57472
  0.0       0.630793   0.630793
  0.0       0.0       -1.66533e-16

julia> sort(abs(diag(r)))[1]
1.6653345369377348e-16

julia> isequal(floor(sort(abs(diag(r)))[1]),0)
true
Run Code Online (Sandbox Code Playgroud)

但这不对

julia> isequal(sort(abs(diag(r)))[1],convert(AbstractFloat,0.0))
false
Run Code Online (Sandbox Code Playgroud)

Julia中有一个函数来检查等于零的浮点数吗?

julia

2
推荐指数
1
解决办法
655
查看次数

如何从同一个类的另一个方法调用静态类方法?

我正在尝试使用Octave,我找不到如何运行一些使用文件功能的脚本,我尝试的最后一件事是创建一个类,但没有成功.问题是某些功能在其他功能中.例如:

classdef ALLFUNCS
   methods(Static)
      function result = SumElements(a,b,c)
          result = a + b + c;
      end
      function [prod,div] = MultiplyDivide(v1,v2,v3)
          prod = v1 * v2 * v3;
          div  = v1 / v2 / v3;
      end
      function resulta = powelents(a,b,c)
        pas = SumElements(a,b,c);
        resulta = pas*pas;
      end 
   end
end
Run Code Online (Sandbox Code Playgroud)

在我放的命令行中

s2 = ALLFUNCS.powelents(3,4,5);
Run Code Online (Sandbox Code Playgroud)

错误是:

error: 'SumElements' undefined near line 11 column 19
error: called from
powelents at line 11 column 17
Run Code Online (Sandbox Code Playgroud)

那么我该如何解决这个问题呢?

matlab octave

2
推荐指数
1
解决办法
41
查看次数

删除MATLAB中的数组元素

在MATLAB中,我们可以删除一个对象

o = obj();
delete o;
Run Code Online (Sandbox Code Playgroud)

我们可以显式删除数组中的对象吗?

arr = {obj(), obj(), obj()};
delete arr{1}; % ???
Run Code Online (Sandbox Code Playgroud)

另外,如果我们明确地调用delete,MATLAB会释放内存吗?

matlab octave

0
推荐指数
1
解决办法
336
查看次数