我有一个整数向量,让我们说从1到3(可以更多):
x <- sample(1:3, 10, replace=T)
[1] 1 3 1 2 2 1 3 2 3 2
Run Code Online (Sandbox Code Playgroud)
如果我排序x我会得到
sort(x)
[1] 1 1 1 2 2 2 2 3 3 3
Run Code Online (Sandbox Code Playgroud)
但我首先需要2s,然后是1s,然后是3s.
[1] 2 2 2 2 1 1 1 3 3 3
Run Code Online (Sandbox Code Playgroud)
那么,如果我有一个向量y = c(2, 1, 3),我如何使用它来排序顺序?
实际上我不需要值本身,而是原始向量中的排序值索引,就像我从order函数中得到的那样.
如何找出最初引入Matlab/toolbox版本的特定函数或类?我知道我可以查看所有发行说明,或谷歌可以提供帮助,但还有更好的方法吗?
我通过Matlab Central搜索和搜索,但找不到任何方法直接在Matlab中打开DBF文件.TMW File Exchange中有一些DBFREAD函数的引用,但它不再可用.这真的是个问题吗?
我有数据库工具箱,但在那里找不到dbf支持.
我不想使用Excel或其他工具来转换Matlab以外的文件,因为我有很多要处理的文件.ODBC也不好,我需要代码在Mac和Unix下工作.
请帮忙.
在字符串的单元格数组上使用带有标记的regexp,我得到了单元格的单元格数组.这是一个简化的例子:
S = {'string 1';'string 2';'string 3'};
res = regexp(S,'(\d)','tokens')
res =
{1x1 cell}
{1x1 cell}
{1x1 cell}
res{2}{1}
ans =
'2'
Run Code Online (Sandbox Code Playgroud)
我知道在S中每个单元字符串只有一个匹配项.我如何将这个输出转换为矢量化形式的字符串单元格数组?
我有3D矩阵(10000 x 60 x 20),我需要置换第二维和第三维,保持列完好无损.
对于2D矩阵,我使用RANDPERM:
pidx = randperm(size(A,2));
Aperm = A(:,pidx);
Run Code Online (Sandbox Code Playgroud)
我不能只应用RANDPERM两次 - 首先是列索引,然后是页面索引.没有足够的随机化.
一种解决方案是将矩阵从3D压缩到2D,将页面和页面压缩到列,对其进行置换,然后重新整形.但我也想以这样一种方式进行排列,即每列独立地排列列.就像是:
Aperm = zeros(size(A));
for p=1:size(A,3)
pidx = randperm(size(A,2));
Aperm(:,:,p) = A(:,pidx,p);
end
Run Code Online (Sandbox Code Playgroud)
我能更有效地完成吗?有更好的方法吗?
设置时DefaultAxesColorOrder,DefaultAxesLineStyleOrderMATLAB将首先使用第一种样式循环显示所有颜色,然后再使用第二种样式循环显示所有颜色,依此类推.
我想要做的是设置颜色顺序和样式顺序,以便独立应用.
例如,如果我设置DefaultAxesColorOrder到[1 0 0; 0 1 0; 0 0 1]和DefaultAxesLineStyleOrder到'-|--|:',线条将是'r-','g-','b-','r--','g--','b--','r:','g:','b:'.我想线路是'r-','g--','b:'.
我在MATLAB中生成了一个包含大量元素(100000+)的图形,并希望将其保存到PDF文件中。使用zbuffer或painters渲染器,我得到了一个非常大且缓慢打开的文件(超过4 Mb)-所有点均为矢量格式。使用OpenGL渲染器将PDF中的图形光栅化,可以使用该图,但对于文本标签则不好。文件大小约为150 Kb。
尝试使用以下简化代码,例如:
x=linspace(1,10,100000);
y=sin(x)+randn(size(x));
plot(x,y,'.')
set(gcf,'Renderer','zbuffer')
print -dpdf -r300 testpdf_zb
set(gcf,'Renderer','painters')
print -dpdf -r300 testpdf_pa
set(gcf,'Renderer','opengl')
print -dpdf -r300 testpdf_op
Run Code Online (Sandbox Code Playgroud)
带有多个轴和不同类型的图的实际图形要复杂得多。
有什么方法可以栅格化图形,但将文本标签保留为矢量?
OpenGL的另一个问题是在Mac OSX的终端模式(-nosplash -nodesktop -nodisplay)下不起作用。看起来不支持OpenGL。我必须使用终端模式进行自动化。我运行的MATLAB版本是2007b。Mac OSX服务器10.4。
我知道,一般的答案是肯定的,但这是我的情况.
我从一个MATLAB的工具箱中获得了一个绘图功能,并修改了它的m文件来绘制我需要的东西.最终,这个功能成为我希望作为开源(或其他许可证)分发的程序的一部分.我可以这样做吗?好吧,以这种方式创建一个函数可能并不明智,但我当时并没有考虑分发.该功能仍然依赖于此工具箱中的其他功能,因此潜在用户应该拥有该许可证.
有什么想法,建议吗?
你有没有直接修改MATLAB的m文件?
我最近发现了很棒的卡片--SET.简而言之,有81种具有四种特征的卡片:符号(椭圆形,波浪形或菱形),颜色(红色,紫色或绿色),数字(一,二或三)和阴影(实心,条纹或开放).任务是定位(从选定的12张卡片)一套3张卡片,其中每张卡片上的四个特征中的每一个都是相同的,或者每张卡片上的所有特征都是不同的(没有2 + 1组合).
我已经在MATLAB中对其进行了编码以找到解决方案,并估计随机选择卡片中设置一组的几率.
这是我估算赔率的代码:
%% initialization
K = 12; % cards to draw
NF = 4; % number of features (usually 3 or 4)
setallcards = unique(nchoosek(repmat(1:3,1,NF),NF),'rows'); % all cards: rows - cards, columns - features
setallcomb = nchoosek(1:K,3); % index of all combinations of K cards by 3
%% test
tic
NIter=1e2; % number of test iterations
setexists = 0; % test results holder
% C = progress('init'); …Run Code Online (Sandbox Code Playgroud) 我正在编写一个函数来创建ggplot的散点图,其中点的大小表示具有相同X和Y坐标的点的数量.
我有一个有效的功能:
require(dplyr)
plot_size_bubbles <- function(x,y) {
dd = data.frame(x,y) %>%
group_by(x,y) %>%
summarise(n=n()) %>%
ungroup()
ggplot(dd, aes(x,y)) + geom_point(aes(size=n))
}
X = sample(1:3,10,replace = T)
Y = sample(1:3,10,replace = T)
plot_size_bubbles(X,Y)
Run Code Online (Sandbox Code Playgroud)
我想以ggplot的风格作为从geom_point继承的自定义几何函数.也许我可以使用一些统计功能,不确定.基本上我想将ggplot传递给数据框,映射x和y,并在不事先计算点大小的情况下创建此图.喜欢
ggplot(data.frame(X,Y), aes(X,Y)) + geom_sizebubble()
Run Code Online (Sandbox Code Playgroud)
此外,从原始数据框中获得x和y轴标签会很棒.
希望这是可能的,我只是遗漏了一些东西.
matlab ×8
r ×2
cell ×1
class ×1
colors ×1
dbase ×1
dbf ×1
function ×1
ggplot2 ×1
ggproto ×1
history ×1
licensing ×1
line ×1
linestyle ×1
matrix ×1
open-source ×1
pdf ×1
permutation ×1
plot ×1
probability ×1
random ×1
regex ×1
rendering ×1
save ×1
set ×1
simulation ×1
sorting ×1
string ×1
vector ×1
version ×1