我有数组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
,对齐每个向量的唯一值,并除以各自的绝对频率。但是我认为上面的方法更清晰,更容易理解。