首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >尴尬的数组:沿命名轴使用布尔掩码的花式索引

尴尬的数组:沿命名轴使用布尔掩码的花式索引
EN

Stack Overflow用户
提问于 2019-12-03 05:44:29
回答 1查看 319关注 0票数 1

我有一个2D音频数据集。这些音频片段的长度不同,因此我使用的是尴尬的数组。通过布尔掩码,我只想返回包含语音的部分。

表掩码尝试

代码语言:javascript
复制
import numpy as np
import awkward as aw

awk = aw.fromiter([{"ch0": np.array([0, 1, 2]), "ch1": np.array([3, 4, 5])},
                   {"ch0": np.array([6, .7]), "ch1": np.array([8, 9])}])
# [{'ch0': [0.0, 1.0, 2.0], 'ch1': [3, 4, 5]},
#  {'ch0': [6.0, 0.7], 'ch1': [8, 9]}]

awk_mask = aw.fromiter([{"op": np.array([False, True, False]), "cl": np.array([True, True, False])},
                        {"op": np.array([True, True]), "cl": np.array([True, False])}])
# [{'cl': [True, True, False], 'op': [False, True, False]},
#  {'cl': [True, False], 'op': [True, True]}]

awk[awk_mask]
# TypeError: cannot interpret dtype [('cl', 'O'), ('op', 'O')] as a fancy index or mask

Table似乎不能用于复杂的索引。

阵列掩码尝试

Numpy当量

代码语言:javascript
复制
nparr = np.arange(0,6).reshape((2, -1))
# array([[0, 1, 2],
#        [3, 4, 5]])

npmask = np.array([True, False, True])
nparr[:, npmask]
# array([[0, 2],
#        [3, 5]])

表版本尝试;失败

代码语言:javascript
复制
awk[:, npmask]
# NotImplementedError: multidimensional index through a Table (TODO: needed for [0, n) -> [0, m) -> "table" -> ...)

似乎多维选择还没有实现。

JaggedArray - Numpy掩码版本;works

代码语言:javascript
复制
jarr = aw.fromiter(nparr)
# <JaggedArray [[0 1 2] [3 4 5]] at 0x..>

jarr[:npmask]
# array([[0, 2],
#        [3, 5]])

JaggedArray - JaggedArray掩码版;works

代码语言:javascript
复制
jmask = aw.fromiter(npmask)
# array([ True, False,  True])

jarr[:, jmask]
# array([[0, 2],
#        [3, 5]])

问题

  • 如何使用Table或命名维度(如X阵列)进行有效的布尔掩码选择?
  • Table中的多维选择是在awkward-array中实现,还是只在awkward-1.0中实现?

图书馆版本

代码语言:javascript
复制
print("numpy version  : ", np.__version__)  # numpy version  :  1.17.3
print("pandas version : ", pd.__version__)  # pandas version :  0.25.3
print("awkward version : ", aw.__version__)  # awkward version :  0.12.14
EN

回答 1

Stack Overflow用户

发布于 2019-12-03 05:44:29

这不是命名数组维,而是只有JaggedArrays,蒙面选择是可能的:

代码语言:javascript
复制
jarr_2d = aw.fromiter([[np.array([0, 1, 2]), np.array([3, 4, 5])],
                       [np.array([6, 7]), np.array([8, 9])]])
# <JaggedArray [[[0 1 2] [3 4 5]] [[6 7] [8 9]]] at 0x7fc9c7c4e750>

jarr_2d_mask = aw.fromiter([[np.array([False, True, False]), np.array([True, True, False])],
                            [np.array([True, True]), np.array([True, False])]])
# <JaggedArray [[[False True False] [True True False]] [[True True] [True False]]] at 0x7fc9c7c1e590>


jarr_2d[jarr_2d_mask]
# <JaggedArray [[[1] [3 4]] [[6 7] [8]]] at 0x7fc9c7c5b690>

不确定这段代码是否有效?特别是与只使用Numpy数组的高级索引相比?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59150837

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档