【发布时间】:2018-10-07 17:15:44
【问题描述】:
我想将 Numpy 2D 数组的每一行与所有其他行进行比较,并得到一个二进制矩阵的输出,该矩阵表示每对行的不匹配特征。
也许,对于输入:
index col1 col2 col3 col4
0 2 1 3 3
1 2 3 3 4
2 4 1 3 2
我想得到以下输出:
index col1 col2 col3 col4 i j
0 0 1 0 1 0 1
1 1 0 0 1 0 2
2 1 1 0 1 1 2
因为 'i' 和 'j' 保存比较行的原始索引
实现这一点的最有效方法是什么?
由于“for”循环,我当前的实现耗时过长:
df = pd.DataFrame([[2,1,3,3],[2,3,3,4],[4,1,3,2]],columns=['A','B','C','D']) # example of a dataset
r = df.values
rows, cols = r.shape
additional_cols = ['i', 'j'] # original df indexes
allArrays = np.empty((0, cols + len(additional_cols)))
for i in range(0, rows):
myArray = np.not_equal(r[i, :], r[i+1:, :]).astype(np.float32)
myArray_with_idx = np.c_[myArray, np.repeat(i, rows-1-i), np.arange(i+1, rows)] # save original df indexes
allArrays = np.concatenate((allArrays, myArray_with_idx), axis=0)
【问题讨论】:
-
FWIW 我不认为这是 for 循环——手动循环每一对需要我
标签: python arrays numpy comparison