我写了一个循环通过几个@Override
public void open(Collection<TopicPartition> partitions) {
HashMap<TopicPartition, Long> offsetMapNew = new HashMap<>();
for (TopicPartition tp : partitions) // for each partition assigned
{
Long offset = myOffsetMap.get(tp.topic() + "-" + tp.partition());
if (offset == null) { offset = 0l; } // 0 Long
offsetMapNew.put(tp, offset);
}
mySavedTaskContext.offset(offsetMapNew); // sync offsets ?
}
的脚本。
我得到的输出看起来像这样:
matrices
依旧......
我想要做的是计算存在多少个唯一的配置文件,如果一个矩阵包含10,40,50
20,60,50,80
30,50,70,110
30,70,110
,它将被计为标记为(10,40,50)的一个配置文件,如果它将找到另一个矩阵,它应该打印完全相同(10,40,50):10,40,50找到2次,依此类推。
总而言之,我有一个运行矩阵的脚本。它们包含不同的值,不时重复,我想要计算所有存在的唯一配置文件。我们输入这个:
10,40,50
输出应该是(然而可以输出计数):
10,40,50
10,40,50
10,40,50
30,50,70,110
20,60,50,80
30,50,70,110
10,40,50
10,40,50
非常非常感谢帮助,这是为了一个爱好项目。
编辑:这不是我正在使用的单元格数组,它是&lt; 1x500&gt;矢量我正在循环低谷。
答案 0 :(得分:1)
(遗憾的是unique
函数不能处理数字向量的单元格数组。)
您可以按照以下方式执行此操作:
x = { [10,40,50];
[10,40,50]
[10,40,50];
[30,50,70,110];
[20,60,50,80];
[30,50,70,110];
[10,40,50];
[10,40,50] };
[ii, jj] = ndgrid(1:numel(x)); % indices of all pairs
m = cellfun(@isequal, x(ii), x(jj)); % all pairwise comparisons
[u, v] = unique(m, 'rows', 'stable'); % unique rows, and their indices
count = sum(u,2); % result: number of repetitions
unique_x = x(v); % result: unique vectors
这给出了
>> celldisp(unique_x)
unique_x{1} =
10 40 50
unique_x{2} =
30 50 70 110
unique_x{3} =
20 60 50 80
>> count
count =
5
2
1
以所需格式显示:
for n = 1:numel(unique_x)
disp([mat2str(unique_x{n}) ' found ' num2str(count(n)) ' time(s)'])
end
打印
[10 40 50] found 5 time(s)
[30 50 70 110] found 2 time(s)
[20 60 50 80] found 1 time(s)
如果结果是在循环中获得的:将它们收集到一个单元格数组中然后应用上面的内容:
x = cell(1,num_iter); % preallocate if possible
for iter_index = 1:num_iter
% Do stuff that gives a vector iter_result as a result
x{iter_index} = iter_result;
end
% Now apply above code to x
答案 1 :(得分:0)
我猜你的脚本输出是一个单元格数组,因为我的特殊答案是基于这个假设。因此,如果脚本的输出是:
output = {[10,40,50];
[10,40,50];
[10,40,50];
[30,50,70,110];
[20,60,50,80];
[30,50,70,110];
[10,40,50];
[10,40,50]};
我们可以以字符串格式转换您的输出。 Lame,但工作:):
tmp = cellfun(@num2str,output,'UniformOutput',false);
然后我们使用unique
函数:
[a,b,c]=unique(tmp);
a
是tmp
的唯一字符串,b
是tmp中第一次出现字符串,c
显示tmp
中的哪个元素对应a
中的哪个元素,即将tmp
映射到a
。我们现在要做的就是计算向量1
中2
- s,3
- s,c
- s等的数量。我更喜欢为此目的使用一个简单的循环:
for k = 1:length(b)
n(k) = nnz(c == k);
disp(['[',a{k},'] found ',num2str(n(k)),' time(s)'])
end
所以,最终的输出是:
[10 40 50] found 5 time(s)
[20 60 50 80] found 1 time(s)
[30 50 70 110] found 2 time(s)
希望有所帮助
答案 2 :(得分:0)
output = {[10,40,50];
[10,40,50];
[10,40,50];
[30,50,70,110];
[20,60,50,80];
[30,50,70,110];
[10,40,50];
[10,40,50]};
tmp = cellfun(@num2str,output,'UniformOutput',false); % number to string
[a,~,c] = unique(tmp); % find unique profiles and index from tmp to a
count = accumarray(c,1); % count same index in c
然后
for k = 1 : length(a)
fprintf('[ %s ] found %d time(s)\n',a{k},count(k));
end
显示与其他答案相同的消息。