使用索引匹配表的行

1次查看(过去30天)
卢卡斯Netzer
卢卡斯Netzer 2021年8月9日
编辑: 卢卡斯Netzer2021年8月10日
我有一个索引:
指数=(1、3、7、10、15 17;20);
我想使用该索引访问表1中的行:
表1。WP1 =[1;8;17;24;26;28;35;45;53;57;68;75;79;81;85;96;103;108;118;125];
表1。WP2 =[8;17;24;26;28;35;45;53;57;68;;75;79;81;85;96;103;108;118;125;130];
我总是需要访问一行范围,定义为:
k = 1:高度(索引)1
范围=指数(k) + 1:指数(k + 1) 1
这将导致每次迭代需要检查的行:
范围=[2:2,4:6;8:9;十一14;16:16;18:19]
所以在第一次迭代中,我想要访问2:2行,这应该给我值:
(8、17)
迭代2访问行4:6,因此检查值:
[[24、26],[26日28],[28:35]]
我希望这是可以理解的。任何帮助或提示是感激的,至于什么技术可能是最好的!
谢谢你!

答案(1)

彼得·珀金斯
彼得·珀金斯 2021年8月9日
Lukas,你没有说在获得这些行之后你需要做什么,但是我建议你应该使用rowfun和一个分组变量。以下是分组变量:
>> g = 0 (0,1);g(指数)= 1;
> > cumsum (g)
ans =
1
1
2
2
2
2
3.
3.
3.
4
4
4
4
4
5
5
6
6
6
7
把它添加到您的表格中,就可以了。没有循环。
1评论
卢卡斯Netzer
卢卡斯Netzer 2021年8月10日
嘿,彼得,
谢谢你的回答。我会给你更多的背景,这样可以更好地描述我的问题:
我有两张桌子。表1包含:
表1。WP1 ={0;0;145;169;1693;1708;2729;0;0;48;1382;1390;1896;1899;2549;2569;0;0;145;169;1693;1708;2638;0};
表1。WP2 ={0;145;169;1693;1708;2729;2779;0;48;1382;1390;1896;1899;2549;2569;2750;0;145;169;1693;1708;2638;2737;0};
表1。WC = {0, 0, 1, 1, 1, 1, 0, 0, 0; 1; 1; 1; 1; 1; 1; 0, 0, 0; 1; 1; 1; 1; 0, 0};
而表2包含以下内容:
表二。WP1 ={0, 0; 5; 115; 219; 262; 328; 408; 424; 531; 562; 620; 676; 781; 805; 808; 919; 1009; 1112; 1183; 1241; 1254; 1283; 1323; 1346; 1362; 1383; 1472; 1548; 1559; 1578; 1600; 1642; 1693; 1700; 1763; 1843; 1861; 1966; 1982; 2135; 2150; 2159; 2197; 2233; 2253; 2301; 2358; 2377; 2394; 2419; 2438; 2453; 2486; 2506; 2515; 2528; 2554; 2559; 2577; 2637; 2694; 2716; 2737; 2764; 2777; 2779; 0; 0; 2; 15; 41; 48; 66; 104; 174; 197; 205; 241年; 260; 282; 309; 318; 339; 363; 379; 400; 436; 465; 512; 519; 546; 576; 602; 613; 787; 870; 897; 968; 1031; 1082; 1147; 1165; 1169; 1181; 1250; 1339; 1382; 1404; 1442; 1467; 1532; 1607; 1668; 1711; 1791; 1874; 1896; 1910; 1942; 1959; 2025; 2085; 2138; 2275; 2313; 2379; 2451; 2491; 2549; 2597; 2621; 2658; 2687; 2723; 2729; 2731; 2735; 2739; 2745; 2746; 2750; 0; 0; 5};
表二。WP2 ={0; 5; 115; 219; 262; 328; 408; 424; 531; 562; 620; 676; 781; 805; 808; 919; 1009; 1112; 1183; 1241; 1254; 1283; 1323; 1346; 1362; 1383; 1472; 1548; 1559; 1578; 1600; 1642; 1693; 1700; 1763; 1843; 1861; 1966; 1982; 2135; 2150; 2159; 2197; 2233; 2253; 2301; 2358; 2377; 2394; 2419; 2438; 2453; 2486; 2506; 2515; 2528; 2554; 2559; 2577; 2637; 2694; 2716; 2737; 2764; 2777; 2779; 2779; 0; 2; 15; 41; 48; 66; 104; 174; 197; 205; 241; 260; 282; 309; 318; 339; 363; 379; 400; 436; 465; 512; 519; 546; 576; 602; 613; 787; 870; 897; 968; 1031; 1082; 1147; 1165; 1169; 1181; 1250; 1339; 1382; 1404; 1442; 1467; 1532; 1607; 1668; 1711; 1791; 1874; 1896; 1910; 1942; 1959; 2025; 2085; 2138; 2275; 2313; 2379; 2451; 2491; 2549; 2597; 2621; 2658; 2687; 2723; 2729; 2731; 2735; 2739; 2745; 2746; 2750; 2750; 0; 5, 115};
表二。距离={0, 114.600000000000; 3914.20000000000; 7696.20000000000; 4513.30000000000; 7454.20000000000; 8289.70000000000; 1003.40000000000; 11139; 2183.60000000000; 6023.80000000000; 6680.40000000000; 11065.1000000000; 800.700000000000; 49.6000000000000; 6109.90000000000; 6136; 8375.60000000000; 4463.50000000000; 5994.60000000000; 1155.30000000000; 1879.70000000000; 4298.50000000000年,2795.80000000000,1225.50000000000};
在这些基础上,我为表1和表2创建了一个索引,当WP1和WP2为0时,我们添加一个STOP:
B =表1。WP1 = = 0 & table1.WP2 = = 0;
IndStopt1 =找到(B);
Bwp =表二。WP1 & table2.WP2 = = 0;
IndStopt2 =找到(Bwp);
这些指数有相同的长度——>相同数量的停止,这很好,它应该是:)
IndStopt1 =[1; 8、17 24;26;28;35;45;53;57;68;75;79;81;85;96;103;108;118;125;130;136;146;152;158);
IndStopt2 = [1; 68; 143; 213; 225; 248; 293; 333; 397; 426; 474; 541; 561; 567; 606; 654; 721; 750; 802; 830; 859; 899; 938; 962; 994);
索引用于定义每个表中需要在停止之间匹配的行。
例如——>表1的第2行到第7行需要与表2的第2行到第67行匹配。站被省略了。
现在我想要table2。WC,与表1对齐。WC应该是这样的:
表二。WC = {0, 0, 0, x; 1; 1; 1; 1;...
注意x -> table1。WP1 WP2 / WC =(0145 0),(145169 1),(169、1693、1)
但表二。WP1/WP2 =(115, 219)——>部分符合两者。这是我需要处理的特殊情况(稍后?),并根据它的“边”给它赋值。这里0有30条边(145-115),1有74条边(219-145)。这需要相应的处理,但我不确定目前如何做。
表二。WC稍后将用于运行表2。距离,距离仅在表2中使用。厕所是1。
所以我现在的主要问题是根据指定的索引匹配行,下一个问题是如何处理特殊情况。
到目前为止,我已经试过了,但似乎不起作用:
n = 1:长度(IndStopt1) - 1
k = IndStopt2 ((n) + 1): IndStopt2 ((n + 1) 1)
l = IndStopt1 ((n + 1)): IndStopt1 ((n + 1) 1)
如果table2.WP1(k) >= table1.WP1(l) &&...
table2.WP2 (k) < = table1.WP2(左)
table2.WC (k) = table1.WC(左)
结束
结束
结束
结束
感谢您的阅读——同样,任何关于什么方法是最好的建议都非常感谢!
注意:展示的表格和列不匹配,但应该给出一个线索,我正在处理什么!
BRG,卢卡斯

登录评论。

社区寻宝

在MATLAB Central中找到宝藏,并发现社区可以如何帮助你!

开始狩猎!

翻译的