我想知道scipy是否提供了实现epsilon邻域搜索的原始但对内存友好的方法的选项:
计算我的数据的成对相似度,但将所有小于阈值epsilon
的相似度动态设置为零,然后将结果直接作为稀疏矩阵输出。
例如scipy.spatial.distance.pdist()
确实非常快,但是至少比我的时间限制要早达到内存限制,至少在我使用squareform()
的情况下。
我知道在这种情况下有O(n * log(n))个解决方案,但现在如果结果稀疏就足够了。同样显然,我将不得不使用相似性而不是距离,但这应该不是一个大问题。
答案 0 :(得分:1)
只要您可以根据距离度量(例如1减去相似度)重铸相似度度量,那么最有效的解决方案是使用sklearn的BallTree。
否则,您可以通过将每个点与其他$ i -1 $点进行比较,并丢弃所有小于阈值的值,来构建自己的scipy.sparse.csr_matrix矩阵。
在不知道您的特定相似性度量标准的情况下,此代码应该可以大致解决问题:
package zm.study.xmlserialize.jackson;
import java.io.StringReader;
import org.junit.Test;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.dataformat.xml.XmlMapper;
public class JacksonIgnoreUnknownTest {
public static class A {
public String f1;
}
@JsonIgnoreProperties(ignoreUnknown=true)
public static class B {
public String f1;
}
@Test
public void ignoreUnknownGlobally() throws Exception
{
String xml = "<A><f1>1</f1><f2>2</f2></A>";
XmlMapper mapper = new XmlMapper();
mapper.configure(DeserializationFeature.FAIL_ON_IGNORED_PROPERTIES, true);
mapper.disable(DeserializationFeature.FAIL_ON_IGNORED_PROPERTIES);
mapper.readValue(new StringReader(xml), A.class);
}
@Test
public void ignoreUnknownPerType() throws Exception
{
String xml = "<B><f1>1</f1><f2>2</f2></B>";
XmlMapper mapper = new XmlMapper();
mapper.readValue(new StringReader(xml), B.class);
}
}