我在一本书中读到"你不能用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) 在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) 把事情放到上下文中:
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,而不是一个明确的定义×; const × = cross在sysimg.jl.问题1:是否有一种更简单的编程方式来检查函数是否定义了别名?即是否有一个相同的概念:
Run Code Online (Sandbox Code Playgroud)julia> findaliases(cross) result: [×](我试过匹配 …
我想制作一个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循环压缩成一行,使用类似于这样的行: …
我正在研究机器学习的基础知识,当我阅读有关 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)帮我们计算伪逆公式吗?
谢谢你!
令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中的函数有效地实现等效代码?
我听到有关Octave的实验性JIT编译器功能的非常矛盾的信息,从"它是一个玩具项目,但它基本上不起作用"到"我已经使用它并且我获得了显着的加速".
我知道为了成功使用它需要
--enable-jitat configure时编译八度音程--jit-compiler选项启动八度音程jit_enable和jit_startcnt命令在运行时指定jit编译首选项但我无法令人信服地再现这些效果; 不确定这是因为我错过了我不知道的任何其他步骤,或者它对我的机器没有太大影响.
问:使用该功能的人是否可以成功提供最小的工作示例,证明其正确使用及其在机器上的效果(如果有)?
一个.
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) 我在浏览C++ Core Guidlines文档时偶然发现了以下示例:
例
Run Code Online (Sandbox Code Playgroud)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我们本可以接受一个普通(无单位)双精度作为delta,但这很容易出错.
关于最后一行代码,在该特定页面上没有提到该语法的含义,它看起来对我来说是陌生的.
经过几个小时的浪费投入搞清楚这可能是一个预定义的"用户定义"文字的标准库,并且更多地了解它们,我试图找出这个特定文字的定义,但是这里提到了 's' 和少数几个其他文字,我没有找到关于'm'的信息.
关于SO 还有这个问题,但我认为那里的答案似乎已经完全过时了.
问:标准库预定义的用户定义文字"m"在哪里定义*?
*甜美,甜蜜的头韵.
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中有一个函数来检查等于零的浮点数吗?
我正在尝试使用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中,我们可以删除一个对象
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会释放内存吗?