- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个大的 numpy 数组 k
,形状未指定,我想构造一个相同形状的数组 d
当 中的相应条目时为 1.0 k
介于两个常量 lo
和 hi
之间,否则为 0.0。 (由于更大的代码在做什么,我不想要一个 bool 值数组。)
最明显的方法是
d = np.ones_like(k)
d[np.less(k, lo)] = 0
d[np.greater(k, hi)] = 0
但是,np.less
和 np.greater
调用涉及创建大型临时 bool 数组,我认为这是一个很大的开销。有没有一种方法可以在不涉及创建任何大型临时对象的情况下执行此操作,同时保持完全矢量化?
最佳答案
正如其他人所说,numpy 对临时缓冲区的负担很重,而且它没有提供太多控制权。如果内存占用真的是一个障碍,你可以放弃你自己的小例程。例如,
def process(x, lo, hi):
""" lo <= x < hi ? 1.0 : 0.0."""
x_shape = x.shape
xx = np.ascontiguousarray(x).ravel()
out = np.empty_like(xx)
_process(xx, lo, hi, out)
return out.reshape(x_shape)
_process
在 cython 中的位置:
%%cython --annotate
import cython
@cython.boundscheck(False)
@cython.wraparound(False)
def _process(double[::1] x, double lo, double hi, double[::1] out):
""" lo <= x < hi ? 1.0 : 0.0."""
cdef:
Py_ssize_t j
double xj
for j in range(x.shape[0]):
xj = x[j]
if lo <= xj < hi:
out[j] = 1.0
else:
out[j] = 0.0
这里我使用了 jupyter notebook(因此使用了有趣的 %%cython
语法)。在实际项目中,您需要放入 setup.py
来编译扩展等。这样做的好处是否值得,这取决于您。
关于python - 最有效的方法(lo <= k && k <= hi)? 1 : 0 for k a numpy array, lo, hi 常量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37169101/
这个问题在这里已经有了答案: Calculating mid in binary search (13 个回答) 关闭8年前。 我正在阅读二进制搜索...我知道查找中间值的传统方法就像 mid=(hi
我有一个大的 numpy 数组 k,形状未指定,我想构造一个相同形状的数组 d 当 中的相应条目时为 1.0 k 介于两个常量 lo 和 hi 之间,否则为 0.0。 (由于更大的代码在做什么,我不想
我正在尝试找出 Unicode 类别的基数,如 Lo。看来我找不到关于那个的权威信息。例如。 Fileformat.info维护此类别中有 11788 个字符的 View ,Codepoints.ne
假设我有一个像这样的对象数组 var outer = [ { "name": "T1", "inner": [ { "type": "DAY"
下面的代码是流行线段树代码的略微修改版本。 我的问题是为什么我们需要在递归构建树时进行 lo > hi 检查,我想不出一个 lo 永远大于 hi 的例子,因为在任何时候它们都等于 [2,2]递归不会更
算法如下: sort(A) quicksort(A, 0, n-1) end quicksort(A, lo, hi) if lo < hi then pi = partition(A
我现在在 Lo-Dash 文档站点上花了几个小时,但找不到解决我的问题的方法。不知道怎么叫,所以有点难找。我基本上想将一个数组分组到一个对象中,以便重复的条目是一个字段,而不同的条目是一个数组。 例如
看一眼 Lo-Dash 文档就会发现 API 属于以下类别: 数组, 链接, 收藏, 函数, 对象, 实用程序, 方法, 和属性 对 Arrays API 的更详细了解显示了大约 30 种适用于数组的
我知道 .so 文件是类似于 Windows 中的 .dll 文件的共享库文件,但是 .lo 文件呢? 最佳答案 .o object (contains compiled code)
如何使用 Lo Dash 使用大于和小于来过滤数组? 使用 Lo Dash 的 _.find demo data : var users = [ { 'user': 'barney', 'ag
我有一个来自推送项目的数组,当我使用 Lo-Dash 显示时,它按升序显示。 这是我的代码: Sorted Array // Sample array. var array = []; // Uti
是否有现有的方法可以在 ORMLite 中为我的 id 生成实现 HI/LO 算法? 我决定从 NHibernate 切换到 ORMLite,并且宁愿不使用 AutoIncrement 或 GUID。
我是 Java 编程新手,正在学习大学类(class),其中的作业是创建一个高/低猜谜游戏。游戏为用户提供最多 5 次尝试输入 1 到 100(含)之间的数字的机会。程序必须提供答案是否太低、太高或正
我有一个高低 ID 生成器,我在多线程环境中使用它。每个线程每秒最多可以调用生成器 100k 次 我有一个相当好的(而且安全的)实现,效果很好。 IdAllocator 是获取下一个“批处理”id 的
#define _CRT_SECURE_NO_WARNINGS #include #include #include #include #include #include #define
我有一个经过简化的数据集: var data = [{ size: 400 }, { size: 500 }, { size: 800 }, { size: 400 }
我有两个对象 A 和 B。我想知道它们是否共享 key x 和 y。 我是这样写的: function sharesKeys(keys, objA, objB) { return _.ever
我在使用 Lo-Dash 合并两个对象时遇到问题并且不明白为什么下面的代码不起作用。我希望 _merge 调用用 fnaaa 扩展 bbb,但这并没有发生。 my={}; my.aaa=functio
如果我有类似的东西 var obj = [{keywords: "a, b, c"}, {keywords: "d, e, f"}] 然后做 var result = _.pluck(obj, 'ke
我有下面的内联汇编代码。我在存在 %hi、%lo 的每一行收到编译错误“错误:无效的‘asm’:%-字母后缺少操作数”。 void func() { __asm__ ( "lis %%r4,
我是一名优秀的程序员,十分优秀!