如何计算Python中正态分布的累积分布函数(CDF)的倒数?
我应该使用哪个库?可能是scipy?
我有两个向量,idx1并且idx2,我想获得它们之间的值.如果idx1和idx2是数字,而不是载体,我能做到这一点的方式如下:
idx1=1;
idx2=5;
values=idx1:idx2
% Result
% values =
%
% 1 2 3 4 5
Run Code Online (Sandbox Code Playgroud)
但在我的情况下,idx1并且idx2是可变长度的向量.例如,对于length = 2:
idx1=[5,9];
idx2=[9 11];
Run Code Online (Sandbox Code Playgroud)
我可以使用冒号运算符直接获取其间的值吗?这是类似于以下内容:
values = [5 6 7 8 9 9 10 11]
Run Code Online (Sandbox Code Playgroud)
我知道我可以做idx1(1):idx2(1)和idx1(2):idx2(2),这是单独提取各列的值,因此,如果没有其他的解决方案,我可以用一个for循环做到这一点,但也许Matlab的可以更容易地做到这一点.
为了巧妙地使用线性索引accumarray,我有时觉得需要根据游程编码生成序列.由于没有内置函数,我要求最有效的方法来解码在RLE中编码的序列.
为了使这个公平比较,我想为该功能设置一些规范:
values指定了相同长度的可选第二个参数,则输出应该根据这些值,否则只是值1:length(runLengths).runLengthsvalues 是一个单元阵列.runLengths 简而言之:该函数应该等效于以下代码:
function V = runLengthDecode(runLengths, values)
[~,V] = histc(1:sum(runLengths), cumsum([1,runLengths(:).']));
if nargin>1
V = reshape(values(V), 1, []);
end
V = shiftdim(V, ~isrow(runLengths));
end
Run Code Online (Sandbox Code Playgroud)
以下是一些测试用例
runLengthDecode([0,1,0,2])
runLengthDecode([0,1,0,4], [1,2,4,5].')
runLengthDecode([0,1,0,2].', [10,20,30,40])
runLengthDecode([0,3,1,0], {'a','b',1,2})
Run Code Online (Sandbox Code Playgroud)
和他们的输出:
>> runLengthDecode([0,1,0,2])
ans =
2 4 4
>> runLengthDecode([0,1,0,4], [1,2,4,5].')
ans =
2 5 5 5 5
>> runLengthDecode([0,1,0,2].', [10,20,30,40])
ans =
20
40
40
>> runLengthDecode([0,3,1,0],{'a','b',1,2})
ans …Run Code Online (Sandbox Code Playgroud) 如何创建所有K-组合,带重复一组给定(也称为K-multicombinations或multisubsets使用MATLAB)?
这类似于笛卡尔积,但两行只有它们的排序不同应该被认为是相同的(例如,矢量[1,1,2]=~=[1,2,1]被认为是相同的),因此生成笛卡尔积然后应用unique(sort(cartesianProduct,2),'rows')应该产生相同的结果.
示例:
调用nmultichoosek(1:n,k)应生成以下矩阵:
nmultichoosek(1:3,3)
ans =
1 1 1
1 1 2
1 1 3
1 2 2
1 2 3
1 3 3
2 2 2
2 2 3
2 3 3
3 3 3
Run Code Online (Sandbox Code Playgroud) 我用它combnk来生成一个组合列表.如何生成组合子集,其中始终包含特定值.例如,因为combnk(1:10, 2)我只需要包含3和/或5的组合.有快速的方法吗?
假设我有4个字母,我想在3个地方安排它们(允许重复),所以我会有4 3 = 64个可能的排列.我该如何计算和打印它们?
让我们定义任何函数句柄foo:
foo = @(x) x*2
Run Code Online (Sandbox Code Playgroud)
我试图写一个通用函数defFun生成的Ñ个职大功能foo,即ñ的反复调用foo,它可以存储在另一个手柄功能的方式boo,就像这样:
boo = defFun(foo,n)
Run Code Online (Sandbox Code Playgroud)
例如,
foo = @(x) x^2;
boo = defFun(foo,3);
Run Code Online (Sandbox Code Playgroud)
boo(3)将给予6561 [== foo(foo(foo(3)))]和boo(2)将给予256 [== foo(foo(foo(2)))].
我尝试使用此代码编写,defFun但这些句柄处理起来很棘手.有任何想法吗?
function boo = defFun(foo,n)
h = foo;
for i=2:n
h = h(h);
end
boo = h
end
Run Code Online (Sandbox Code Playgroud) 我想在相同架构的多个openSUSE机器(不同版本)上使用nix-package管理器一致地安装软件.我不是任何系统的root用户,但是想要说服我们的系统管理员nix在使用网络安装的所有机器上以多用户模式安装.
是否可以/nix在所有计算机上安装相同的目录并在所有这些计算机上以多用户模式运行nix?
会nix-env -i干扰其他机器吗?
是nix-env -i xxx安装xxx在所有机器的用户配置文件中还是仅安装在执行命令的机器上?安装的那个怎么样root?
一台机器上的垃圾收集是否考虑了其他机器上安装的软件?
MATLAB的内置函数accumarray接受函数fun作为第四个参数.
A = accumarray(subs,val,sz,fun);
Run Code Online (Sandbox Code Playgroud)
这适用fun于val具有相同下标的元素的每个子集subs.但文件说明:
如果下标
subs未按其线性索引排序,则fun不应取决于其输入数据中值的顺序.
我们如何实现一个没有这个限制的稳定版本accumarray,但是会保证子集采用与给定的相同的顺序val?
例:
subs = [1:10,1:10];
val = 1:20;
accumarray(subs(:), val(:), [], @(x)x(end)).'
Run Code Online (Sandbox Code Playgroud)
这样做的预计产出将是11:20,如果accumarray是稳定的.实际上输出是:
ans =
11 12 13 14 5 6 7 18 19 20
Run Code Online (Sandbox Code Playgroud)
我们的实施应该产生:
accumarrayStable(subs(:), val(:), [], @(x)x(end)).'`
ans =
11 12 13 14 15 16 17 18 19 20
Run Code Online (Sandbox Code Playgroud) 如何在MATLAB中使用匿名函数进行连续函数应用?类似于以下内容:
g = @(x) @(y) x+y;
g(1)(2)
Run Code Online (Sandbox Code Playgroud)
但是,MATLAB在第2行给出错误:() - 索引必须出现在索引表达式的最后.
但以下工作:
g = @(x) @(y) x+y;
f = g(1);
f(2)
Run Code Online (Sandbox Code Playgroud)
上面的脚本输出ans = 3.
我对MATLAB不是很熟悉,但我认为在函数级别上操作的能力使编程变得更加容易.例如,当我需要在L ^ 2的某个子空间上计算函数的投影时,投影算子和规范化等所有输出函数都需要额外的参数来评估数值答案.
matlab ×8
combinations ×2
accumarray ×1
colon ×1
currying ×1
function ×1
handle ×1
multiset ×1
nix ×1
performance ×1
permutation ×1
python ×1
scipy ×1
stable-sort ×1
vector ×1