我有一个数组:
a = np.array([[1,2,3], [0,0,3], [1,2,0],[0,2,3]])
看起来像:
array([[1, 2, 3],
[0, 0, 3],
[1, 2, 0],
[0, 2, 3]])
我需要计算配对关联,但没有考虑0
。因此,例如,应在阵列之间计算“1”和“2”之间的相关性:
array([[1, 2],
[1, 2]])
问题: Numpy和pandas方法会考虑零,我无法提醒他们。 所以,我需要一个更快,更自愿的内置方法。
虽然,我写了我的算法,但它在大型数组上工作得很慢。
correlations = np.zeros((1000,1000))
for i, column_i in enumerate(np.transpose(array_data)):
for j, column_j in enumerate(np.transpose(array_data[:,i+1:])):
if i != j:
column_i = np.reshape(column_i,(column_i.shape[0], 1))
column_j = np.reshape(column_j,(column_j.shape[0], 1))
values = np.concatenate([column_i, column_j],axis=1)
values = [row for row in values if (row[0] != 0) & (row[1] != 0)]
values = np.array(values)
correlation = np.corrcoef(values[:,0], values[:,1])[0][1]
correlations[i,j] = correlation
答案 0 :(得分:0)
实际上,我决定将数据中的所有零都更改为np.nan
for i,e_i in enumerate(array_data):
for j, e_j in enumerate(e_i):
if e_j == 0:
array_data[i,j] = np.NaN
然后,pandas.corr()
工作得很好......