我有一大组数据,在这些数据中,我需要比较这个数组中一组样本与数组中所有其他元素的距离。下面是我的数据集的一个非常简单的例子。
import numpy as np
import scipy.spatial.distance as sd
data = np.array(
[[ 0.93825827, 0.26701143],
[ 0.99121108, 0.35582816],
[ 0.90154837, 0.86254049],
[ 0.83149103, 0.42222948],
[ 0.27309625, 0.38925281],
[ 0.06510739, 0.58445673],
[ 0.61469637, 0.05420098],
[ 0.92685408, 0.62715114],
[ 0.22587817, 0.56819403],
[ 0.28400409, 0.21112043]]
)
sample_indexes = [1,2,3]
# I'd rather not make this
other_indexes = list(set(range(len(data))) - set(sample_indexes))
sample_data = data[sample_indexes]
other_data = data[other_indexes]
# compare them
dists = sd.cdist(sample_data, other_data)
是否有方法为非示例索引的索引编制numpy数组的索引?在上面的示例中,我创建了一个名为“其他索引”的列表。由于各种原因(大数据集、线程、系统上运行的内存量非常低等),我不想这样做。有没有办法做像。。
other_data = data[ indexes not in sample_indexes]
我读到纽比面具可以做到这一点,但我试过。。。
other_data = data[~sample_indexes]
这给了我一个错误。我需要制作一个面具吗?
对于可能应该是单行语句的语句来说,这不是最优雅的,但它相当高效,而且内存开销也很小。
如果内存是您最关心的问题,np.delete将避免创建掩码,而花哨的索引无论如何都会创建一个副本。
再想一想,np.delete不会修改现有数组,所以它几乎就是您要查找的单行语句。
您也可以使用
setdiff1d
:您可以尝试
in1d
相关问题 更多 >
编程相关推荐