如何计算2个不同的数组元素重复多少次,在MATLAB中?



我有数组A(44x1)和B(41x1),我想计算两个数组中元素重复的次数。如果两个数组中都有重复的值,我希望将它们的计数分开(例如:值0.5在A中出现500次,在B中出现350次,所以现在将500除以350)。

我也必须为更大的数组这样做,所以我正在考虑使用循环(但不知道如何在MATLAB上做到这一点)。

我得到了我想要的python:

import pandas as pd
data1 = pd.read_excel('C:/Users/Desktop/Python/data1.xlsx')
data2 = pd.read_excel('C:/Users/Desktop/Python/data2.xlsx')
for i in data1['Mag'].value_counts() & data2['Mag'].value_counts():
a = data1['Mag'].value_counts()/data2['Mag'].value_counts()
print(a)
break

如何在MATLAB上做同样的想法吗?谢谢!

由于可以枚举所有有效的地震震级值,因此可以使用:

% Make up some data
A=randi([2 58],[100 1])/10;
B=randi([2 58],[20 1])/10;
% Round data to nearest tenth
%A=round(A,1); %uncomment if necessary
%B=round(B,1); %same
% Divide frequencies
validmags=0.2:0.1:5.8;
Afreqs=sum(double( abs(A-validmags)<1e-6 ),1); %relies on implicit expansion; A must be a column vector and validmags must be a row vector; dimension argument to sum() only to remind user; double() not really needed
Bfreqs=sum(double( abs(B-validmags)<1e-6 ),1); %same
Bfreqs./Afreqs, %for a fancier version: [{'Magnitude'} num2cell(validmags) ; {'Freq(B)/Freq(A)'} num2cell(Bfreqs./Afreqs)].'

最后一行将为0/0生成NaN,为nn/0生成+Inf,为0/nn生成0。

您还可以使用uniquetol,对齐每个向量的唯一值,并除以各自的绝对频率。但是我认为上面的方法更清晰,更容易理解。

最新更新