【问题标题】:combining numpy arrays and masking结合 numpy 数组和掩码
【发布时间】:2012-07-13 20:09:44
【问题描述】:

我有以下问题。知道使用 numpy 我可以使用 genfromtext 读取数据文件。然后我可以使用掩码(从字典中)从中选择记录。

>>> gln = a[a['AA2'] == 'GLN']
>>> gln['mean'].mean()
62.805000305175781

如何使用数组组合而不是从磁盘读取数组来做到这一点?

x=[]
y=[]
ov=[]
aa=[]

a = numpy.array(x,y,ov,aa)         <== does not actually work
gln = a[a[3] == 'GLN']
gln['mean'].mean()

我如何让它工作?

【问题讨论】:

    标签: python arrays numpy


    【解决方案1】:

    请记住,在 Python 中,[] 生成的对象通常称为list,而不是array。因此,考虑到这一点,我假设您真正的问题是“如何将 4 个独立的 python lists 转换为二维 numpy 数组?”

    答案取决于您希望lists 在数组中的布局方式。假设每个列表代表一行,您可以这样做:

    >>> x = range(0, 4)
    >>> y = range(4, 8)
    >>> ov = range(8, 12)
    >>> aa = range(12, 16)
    >>> numpy.array([x, y, ov, aa])
    array([[ 0,  1,  2,  3],
           [ 4,  5,  6,  7],
           [ 8,  9, 10, 11],
           [12, 13, 14, 15]])
    

    或者,如果每个列表代表一列,您可以这样做:

    >>> numpy.array(zip(x, y, ov, aa))
    array([[ 0,  4,  8, 12],
           [ 1,  5,  9, 13],
           [ 2,  6, 10, 14],
           [ 3,  7, 11, 15]])
    

    然后,您可以像使用由genfromtxt 生成的array 一样使用布尔索引:

    >>> a = numpy.array(zip(x, y, ov, aa))
    >>> a[a == 1]
    array([ 1,  5,  9, 13,  3,  7, 11, 15])
    

    您可能正在寻找将xyovaa 组合成数组的其他方式。在这种情况下,您将不得不指定列表中的内容以及所需输出的形状。

    【讨论】:

    • 我在这里遇到类型错误。类型错误:不支持的操作数类型 %:'numpy.ndarray' 和 'int'
    • @tarrasch,我没有这个问题。你用的是什么版本的numpy? numpy.version.version 的值是多少?但是% 是无关紧要的——这只是一种快速生成布尔数组的方法。
    • 没关系。看来我很愚蠢。您可以将示例更改为 a[a==1] 吗? % 符号弄乱了我的系统,使示例无法正常工作。谢谢你指出。接受。
    猜你喜欢
    • 2018-06-01
    • 2013-03-12
    • 1970-01-01
    • 1970-01-01
    • 2019-10-12
    • 1970-01-01
    • 2016-03-04
    • 2014-03-03
    • 1970-01-01
    相关资源
    最近更新 更多