python - 使用 np.ix_ 子集 2D 数组返回 3D 数组,其中最新维度为 1
问题描述
我正在自动导入和绘制来自测试仪器的数据(以列的行,所以是二维数组)。我导入后的数据有一个基于每行第一列的标本号的索引,我想根据该索引选择其他列中的数据。我在这里找到了一个类似的问题选择某些行(条件满足),但只有 Python/Numpy 中的一些列,并按照该示例获取正确的子集。我不明白为什么 2D 数组作为 3D 数组返回,一维长度为 1。
最小的工作示例:
>>> c = np.array([[1,1,6,7],[1,2,9,8],[2,3,4,3],[3,4,6,2]])
>>> c
array([[1, 1, 6, 7],
[1, 2, 9, 8],
[2, 3, 4, 3],
[3, 4, 6, 2]])
>>> np.shape(c)
(4, 4)
>>> d = c[np.ix_(c[:,0] == 1),2:4]
>>> d
array([[[6, 7],
[9, 8]]])
>>> np.shape(d)
(1, 2, 2)
我知道获得二维数组所需要做的d[0]
就是,但另一次它可能会失败?任何见解将不胜感激。
解决方案
让我们把它分解成可口的部分。
1) 有两种基本类型的索引numpy
:fancy 和 non-fancy。Fancy 是使用数组和列表进行索引,non-fancy 是使用切片和省略号,单个数字索引介于两者之间。
2)花式索引时,输出形状主要由索引数组确定,仅在较小程度上由索引数组确定:
>>> a = np.arange(2, 12, 2)
>>> a
array([ 2, 4, 6, 8, 10])
>>> I = np.arange(4)
>>> I
array([0, 1, 2, 3])
>>> a[I]
array([2, 4, 6, 8])
>>> I2 = I.reshape(2, 2)
>>> I2
array([[0, 1],
[2, 3]])
>>> a[I2]
array([[2, 4],
[6, 8]])
3)当花式和非花式索引混合时,它们是独立应用的:
>>> aa = np.add.outer(a, np.arange(0, 400, 100))
>>> aa
array([[ 2, 102, 202, 302],
[ 4, 104, 204, 304],
[ 6, 106, 206, 306],
[ 8, 108, 208, 308],
[ 10, 110, 210, 310]])
>>> aa[I, 2:4]
array([[202, 302],
[204, 304],
[206, 306],
[208, 308]])
>>> aa[I2, 2:4]
array([[[202, 302],
[204, 304]],
[[206, 306],
[208, 308]]])
相比之下:
>>> aa[I, I]
array([ 2, 104, 206, 308])
4)np.ix_
返回一个元组。这被解释为单一维度:
>>> np.ix_(I)
(array([0, 1, 2, 3]),)
>>> aa[np.ix_(I), 2:4]
array([[[202, 302],
[204, 304],
[206, 306],
[208, 308]]])
>>> aa[I[None], 2:4]
array([[[202, 302],
[204, 304],
[206, 306],
[208, 308]]])
由于索引机制中的一个不幸或至少非常令人困惑的设计选择,如果元组是唯一的索引,它将被忽略:
>>> aa[np.ix_(I)]
array([[ 2, 102, 202, 302],
[ 4, 104, 204, 304],
[ 6, 106, 206, 306],
[ 8, 108, 208, 308]])
>>> aa[I[None]]
array([[[ 2, 102, 202, 302],
[ 4, 104, 204, 304],
[ 6, 106, 206, 306],
[ 8, 108, 208, 308]]])
推荐阅读
- sass - 没有安装 gulp-sass
- pandas - 在 Python 中生成一个词云来显示数字的频率
- regex - 用 2 个表达式构建正则表达式
- regex - sed 正则表达式替换手机号码
- ruby-on-rails - 我可以将表单数据从一个控制器提交到 rails api 控制器上的 ruby 吗?
- python - numpy AttributeError:使用 theano 模块“numpy.core.multiarray”没有属性_get_ndarray_c_version
- mysql - Secure Priv Option Mysql 是什么?
- postgresql - 在 orm.xml (Spring Data / JPA 2.1 /Hibernate 5.3.7/Postgresql) 中定义@Type?
- sql-server - SQL Server 2014:如何在 csv 导出中包含标题和详细信息
- ruby - Ruby Sketchup - 旋转 3d 文本