【发布时间】:2011-07-25 17:30:01
【问题描述】:
一个矩阵有 m 行 n 列(n 是不超过 10 的数字),第 n 列包含 1 或 0(二进制)。我想使用这个二进制文件作为取出相关行的决定(如果为 1,否则如果为 0)。我知道这可以通过使用 IF 条件的迭代来完成。
但是,对于行数 m 达到数百(最多 1000)的矩阵,这可能变得不切实际。还有哪些其他可用的程序?
【问题讨论】:
标签: matlab indexing matrix vectorization
一个矩阵有 m 行 n 列(n 是不超过 10 的数字),第 n 列包含 1 或 0(二进制)。我想使用这个二进制文件作为取出相关行的决定(如果为 1,否则如果为 0)。我知道这可以通过使用 IF 条件的迭代来完成。
但是,对于行数 m 达到数百(最多 1000)的矩阵,这可能变得不切实际。还有哪些其他可用的程序?
【问题讨论】:
标签: matlab indexing matrix vectorization
您可以使用logical datatypes for indexing。例如,
M =
1 2 0 4 5 1 7 8 0
M = [1 2 0;4 5 1;7 8 0];
v = (M(:,n) == 1);
M(v,2) = 1;
M =
1 2 0 4 1 1 7 8 0
如果n 列中的对应元素为真,则现在您已将第 2 列中的所有元素设置为 1。
请注意,v = (M(:,n) == 1) 将nth 列转换为逻辑向量。您可以使用v = logical(M(:,n)); 完成相同的操作
我会推荐这个blog entry 来详细了解逻辑索引。
如果要删除行,请使用:
M(v,:) = [];
【讨论】: