我看见:
"为了理解R中的计算,两个口号是有帮助的:
•存在的一切都是一个对象.
•发生的一切都是函数调用."- 约翰钱伯斯
但我刚刚发现:
a <- 2
is.object(a)
# FALSE
Run Code Online (Sandbox Code Playgroud)
实际上,如果变量是纯基类型,那么结果是.object()将为FALSE.所以它不应该是一个对象.
那么R中"存在的一切是一个对象"的真正含义是什么?
现在,我正在通过查看The Seasoned Schemer这本书来吸取阴谋家.我通过球拍编写代码,但是当我使用时try,计划器没有这个方法或宏.它报告扩展:模块中的未绑定标识符:try.代码如下:(在第89页)
(define (remove-member-first* a lat)
(try oh (rm a lat oh) lat))
Run Code Online (Sandbox Code Playgroud)
我搜索了球拍文件,但没有找到熟悉的功能.
那么谁知道是否有类似'尝试'的功能呢?
我想在python中实现Vantage Point Tree,但它在C++中使用std::nth_element。
所以我想在 Python 或 numpy 中找到等效的“nth_element”函数。
请注意,第 nth_element 只会对数组进行部分排序,并且它是 O(N)。
int the_array[10] = {4,5,7,3,6,0,1,2,9,8};
std::vector<int> the_v(the_array,the_array+10);
std::nth_element (the_v.begin()+0, the_v.begin()+5, the_v.begin()+10);
Run Code Online (Sandbox Code Playgroud)
现在向量可能是:
3,0,2,1,4,5,6,7,9,8
Run Code Online (Sandbox Code Playgroud)
而且我不仅想得到第 n 个元素,还想得到重新排列列表的两个部分,[3,0,2,1,4] 和 [6,7,9,8]。
此外,nth_element 支持接受一个可以比较两个元素的函数,例如,在下面,向量是一个向量 op DataPoint,DistanceComparator 函数将使用 the_v.begin() 比较两个点的距离:
vector<DataPoint> the_v;
for(int n = 0; n < N; n++) the_v[n] = DataPoint(D, n, X + n * D);
std::nth_element (the_v.begin()+0, the_v.begin()+5, the_v.begin()+10,
DistanceComparator(the_v.begin()));
Run Code Online (Sandbox Code Playgroud)
编辑:
我使用了 bhuvan-venkatesh 的答案,并编写了一些代码进行测试。
partition_timer = timeit.Timer("numpy.partition(a, 10000)",
"import numpy;numpy.random.seed(2);"+
"a = numpy.random.rand(10000000)")
print(partition_timer.timeit(10))
sort_timer = timeit.Timer("numpy.sort(a)",
"import numpy;numpy.random.seed(2);"+
"a …Run Code Online (Sandbox Code Playgroud)