- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
给定形状为 (2, 3, 4) 的基本数组 X,它可以解释为两组,每组 3 个元素,其中每个元素都是 4 维,我想通过以下方式从此数组 X 中进行采样。我想从 2 个集合中的每一个中挑选 2 个子集,每个子集由长度为 3 的二进制数组定义,其他子集将设置为 0。因此采样过程由形状 (2, 2, 3) 的数组定义。此采样的结果应具有形状 (2, 2, 3, 4)。
这是执行我需要的代码,但我想知道它是否可以使用 numpy 索引更有效地重写。
import numpy as np
np.random.seed(3)
sets = np.random.randint(0, 10, [2, 3, 4])
subset_masks = np.random.randint(0, 2, [2, 2, 3])
print('Base set\n', sets, '\n')
print('Subset masks\n', subset_masks, '\n')
result = np.empty([2, 2, 3, 4])
for set_index in range(sets.shape[0]):
for subset_index, subset in enumerate(subset_masks[set_index]):
print('----')
picked_subset = subset.reshape(3, 1) * sets[set_index]
result[set_index][subset_index] = picked_subset
print('Picking subset ', subset, 'from set #', set_index)
print(picked_subset, '\n')
输出
Base set
[[[8 9 3 8]
[8 0 5 3]
[9 9 5 7]]
[[6 0 4 7]
[8 1 6 2]
[2 1 3 5]]]
Subset masks
[[[0 0 1]
[1 0 0]]
[[1 0 1]
[0 1 1]]]
----
Picking subset [0 0 1] from set # 0
[[0 0 0 0]
[0 0 0 0]
[9 9 5 7]]
----
Picking subset [1 0 0] from set # 0
[[8 9 3 8]
[0 0 0 0]
[0 0 0 0]]
----
Picking subset [1 0 1] from set # 1
[[6 0 4 7]
[0 0 0 0]
[2 1 3 5]]
----
Picking subset [0 1 1] from set # 1
[[0 0 0 0]
[8 1 6 2]
[2 1 3 5]]
最佳答案
通过沿着最后一个轴添加 subset_masks
的新轴并将 sets
添加为第二个轴,将每个轴扩展到 4D
。为了添加这些新轴,我们可以使用 None/np.newaxis
。然后,杠杆NumPy broadcasting
执行逐元素乘法,如下所示 -
subset_masks[...,None]*sets[:,None]
也许只是为了好玩,我们也可以使用 np.einsum
-
np.einsum('ijk,ilj->iljk',sets,subset_masks)
关于python - 在 numpy 中从多个集合中选取并分配多个子集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46384850/
在下面的代码中,我想不必添加undefined作为filteredDevice的类型注解。我认为一个被过滤的设备不应该是未定义的,因为我过滤掉了未定义的设备。 但是如果我删除 undefined类型注
我有一个 UIButton,其文本来自服务器。按钮的宽度是固定的。我想要的是,如果按钮的文本超过按钮的宽度,文本应该在按钮内选取框。如果文本适合按钮宽度,则不应有选取框效果。 我点击了一些链接(one
我正在从头开始实现 webgl 选取,并决定走 GLSL 路线,而不是光线相交测试。 所以我将整个场景渲染到一个单独的帧缓冲区中,为每个对象分配一个唯一的颜色,该颜色作为统一变量传递给片段着色器。当场
例如,我有包含多个对象的数组, var arr = ["a", "b", "c", "d"]; 我想要的是从该数组中选取 2 个随机对象,例如“a”和“c”,并将这 2 个对象推送到另一个数组中,例如
我是一名优秀的程序员,十分优秀!