A = {'A'; 'E'; 'A'; 'F'};
B = {'A';'B';'C';'D';'E'; 'F'};
Run Code Online (Sandbox Code Playgroud)
我试图获取单元格数组中的每个字符串A,该索引与单元格数组中的该字符串匹配B.A会有重复的价值,B不会.
find(ismember(B, A) == 1)
Run Code Online (Sandbox Code Playgroud)
输出
1
5
6
Run Code Online (Sandbox Code Playgroud)
但我想得到
1
5
1
6
Run Code Online (Sandbox Code Playgroud)
优选地在一个衬里中.我不能使用strcmp而不是ismember,因为向量是不同的大小.
向量实际上将包含日期字符串,我需要索引不是逻辑索引矩阵,我对不使用它进行索引的数字感兴趣.
我该怎么做?
我有这样一个单元格:
A{1,1}=[ 1 ;2; 3;];
A{2,1}=[ 4 ;2;];
A{3,1}=[ 3 ;2; 5; 4; 6;];
...
A{N,1}=[ 10 ;2;5; 7;]; %N is very large.
Run Code Online (Sandbox Code Playgroud)
换句话说,该单元的每个元素中的列数是不同的,没有明确的模式.
现在,我想根据第一列的元素对这些元素进行排序.我的意思是,我希望结果是这样的:
Asorted{1,1}=[ 1 ;2; 3;];
Asorted{2,1}=[ 3 ;2; 5; 4; 6;];
Asorted{3,1}=[ 4 ;2;];
...
Asorted{N,1}=[ 10 ;2;5; 7;];
Run Code Online (Sandbox Code Playgroud)
目前我使用这个功能:
function Asorted = sortcell(A)
B=[];
nrows = size(A,1);
for i=1:nrows % this for-loop is slow
st=A{i,1};
B(i,1) = st(1,1);
end
[sorted,indices] = sort(B);
Asorted = A(indices,:);
end
Run Code Online (Sandbox Code Playgroud)
它有效,但需要很长时间.实际上for循环部分非常慢.
我读了关于猫的功能,但我不知道如何使用它.我用过B = cat(1,A{:}(1,1));,但是有这个错误:??? …
假设我有一个名为 Foo 的类,有一个名为 DateTime 的 datenum 属性。如果我有一个 Foo 对象的元胞数组集合,我将如何根据每个对象的 DateTime 属性对其进行排序?
我已经看到了对重载 sort 方法和使用对象数组的引用,但是由于动态调整大小,我正在使用元胞数组,而这些指令并没有得到支持。有人有什么建议吗?干杯
这个问题是我在回答这个问题的时候出现的。这应该是我正在做的一些愚蠢的错误,但我无法得到它是什么错误\xe2\x80\xa6
\n\nmyMatrix = [22 33; 44 55]\nRun Code Online (Sandbox Code Playgroud)\n\n返回:
\n\n>> subsref(myMatrix, struct(\'type\',\'()\',\'subs\',{{[1 2]}} ) ); \n\nans =\n\n 22 44\nRun Code Online (Sandbox Code Playgroud)\n\n将其与细胞一起使用时:
\n\nmyCell = {2 3; 4 5} \nRun Code Online (Sandbox Code Playgroud)\n\n返回:
\n\n>> subsref(myCell,struct(\'type\',\'{}\',\'subs\',{{[1 2]}} ) );\n\nans =\n\n 2 % WHATTT?? Shouldn\'t this be 2 and 4 Matlab??\nRun Code Online (Sandbox Code Playgroud)\n\n检查subsref 文档,我们看到:
\n\n\n查看 MATLAB 如何调用表达式的 subsref:
\n\nA{1:2} 语法 A{1:2} 调用 B = subsref(A,S),其中 S.type=\'{}\' 和\n S.subs={[1 2]}。
\n
这似乎不正确,因为 subsref 返回的值只是第一个参数,而不是所有参数。 …
我是MATLAB的新手,我正在努力理解数组和元素操作之间的细微差别.我正在使用大型数据集,我发现最简单的方法并不总是最快的.我有一个非常大的字符串Cell数组,就像在这个简化的例子中一样:
% A vertical array of same-length strings
CellArrayOfStrings = {'aaa123'; 'bbb123'; 'ccc123'; 'ddd123'};
Run Code Online (Sandbox Code Playgroud)
我正在尝试提取一个子串数组,例如:
'a1'
'b1'
'c1'
'd1'
Run Code Online (Sandbox Code Playgroud)
我很满意这样的元素参考:
% Simple element-wise substring operation
MySubString = CellArrayOfStrings{2}(3:4); % Expected result is 'b1'
Run Code Online (Sandbox Code Playgroud)
但是,我无法一劳永逸地将这些符号全部引用,如下所示:
% Desired result is 'a1','b1','c1','d1'
MyArrayOfSubStrings = CellArrayOfStrings{:}(3:4); % Incorrect notation!
Run Code Online (Sandbox Code Playgroud)
我知道Matlab能够执行非常快速的数组操作,例如strcat,所以我希望有一种技术能够以类似的速度运行:
% An array-wise operation which works quickly
tic
speedTest = strcat(CellArrayOfStrings,'hello');
toc % About 2 seconds on my machine with >500K array elements
Run Code Online (Sandbox Code Playgroud)
所有使用幕后迭代的for循环和函数我尝试使用我的数据集运行得太慢了.是否有一些阵列方式表示法会这样做?有人能够纠正我对元素和阵列操作的理解吗?!非常感谢!
我想在MatLab中创建一个SQL样式的表,这意味着每一行都是一个观察,每一列都是一个字段.它都是数字的,所以我应该能够将它保存在2D数组中,但为了节省空间,我需要一些字段来占用比其他字段更少的位.
有没有办法有一个数组A,其中A(:,1)的类型为uint32,而A(:,2)的类型为uint8,例如?
我目前正在用一个数组的数组来完成这个,其中单元数组中的每个单元代表一个列(作为nx1数组),然后我访问单个记录的值数组样式.示例:要获取记录45的字段2,我使用A {2}(45).问题是,这不是非常快速,因为我无法对其进行矢量化以获取特定记录的所有字段(侧面问题:是否有像A {1:3}(45)那样的矢量化方法?).
我是matlab的新手,我试图找出何时最好使用单元格,表格或矩阵来存储数据集,然后处理数据.
我想要的是存储包含多个行,包括字符串和数字,然后想要使用数字的数据.
例如,一条线看起来像
'string 1' , time, number1, number 2
Run Code Online (Sandbox Code Playgroud)
.我知道如果元素是数字,矩阵效果最好,但是当我使用单元格时,我不得不将数字或字符串转换为矩阵才能使用它们.我正在运行matlab 2012所以也许这是问题的一部分.任何帮助表示赞赏.谢谢!
说我有一个字符数组,看起来像......
hello
hillo
hello
Run Code Online (Sandbox Code Playgroud)
我想将它们转换为与...相同的元胞数组
A = {'hello';'hillo';'hello'}
Run Code Online (Sandbox Code Playgroud)
我该怎么做呢,我试过使用 mat2cell 但它似乎只是把所有东西都放在一个大单元格中,并没有真正将它们分开..所以说例如使用原始字符数组它会像这样输出如果我把
A = mat2cell(arrayofchars)
[3x5 char]
instead of the preferred output of...
'hello'
'hillo'
'hello'
Run Code Online (Sandbox Code Playgroud)
对不起,如果我没有很好地解释我的问题!我对matlab很陌生!
干杯!
我知道我可以这样写:
tmp = arr{i}
arr{i} = arr{j}
arr{j} = tmp
Run Code Online (Sandbox Code Playgroud)
但是有更简单的方法吗?例如,在Python中我会写:
arr[i], arr[j] = arr[j], arr[i]
Run Code Online (Sandbox Code Playgroud) 我在MATLAB中有一个单元格,其中每个元素包含一个不同长度的向量
例如
C = {[1 2 3], [2 4 5 6], [1 2 3], [6 4], [7 6 4 3], [4 6], [6 4]}
Run Code Online (Sandbox Code Playgroud)
如您所见,某些向量是重复的,其他向量是唯一的.
我想计算每个向量发生的次数并返回计数,以便我可以在GUI中填充表,其中每行是唯一的组合,日期显示每个组合发生的次数.
例如
Count
"[1 2 3]" 2
"[6 4]" 2
"[2 4 5 6]" 1
"[7 6 4 3]" 1
"[4 6]" 1
Run Code Online (Sandbox Code Playgroud)
我应该说每个向量中数字的顺序很重要,即[6 4]与[4 6]不同.
有什么想法我怎么能相当有效地做到这一点?
感谢迄今为止评论过的人.正如@Divakar所指出的那样,我忘了提到矢量中的值可以超过一位数.即[46, 36 28].我的原始代码会将矢量连接[1 2 3 4]到1234然后使用hist进行计数.当然,当你达到一位数以上就会分崩离析,因为你可以分辨出[1, 2, 3, 4]和之间的区别[12, 34].