【问题标题】:Removing groups of values from a large array从大数组中删除值组
【发布时间】:2016-12-08 10:44:08
【问题描述】:

我有一个 4 列数组,在一列中,它们由大约 6 或 7 个不同的重复值组成。我想做的是通过删除一种类型的数字和每个值的关联行来创建一组较小的数组。

例如:

1 2 3 4
3 6 5 4
3 2 9 8
5 3 0 8
4 6 9 5
7 3 4 7

在第二列中,重复了 2、3 和 6,我将如何提取所有在第二列中有 3 的行,然后将这个结果放入一个新数组中?

编辑:我忘了提到数据位于 .dat 文件中作为 2D 数组

【问题讨论】:

  • 嗯,你试过什么?
  • 这些数据是在普通的 Python 2D 列表中,还是 Numpy 数组,或其他类型的数组对象中?
  • 澄清它在 .dat 文件中作为二维数组

标签: python arrays python-3.x


【解决方案1】:

使用 Python 列表

# construct a list contain all rows with column 'colm' value  'value' for a matrix 
# matrix is a list contain rows from file.dat eg formated [[],[],[]...]
def construct(colm, value, matrix):
    result = [] 
    for row in matrix:
        if row[colm-1] == value:
            result.append(row)
    return result

# Read file.dat and return list matrix
def read():
    var = []
    try:
        file = open("file.dat", 'r')
        for line in file:
            # append a list with a file.dat row, and convert each item to integer
            var.append([int(y) for y in line.strip().split(' ')])
    finally:
        file.close()
    return var

所以你可以把它当作

constuct(2, 3, read()) # all rows with second column with value 3

注意:我对NumPy 的探索不多,但如果您的.dat 文件包含大量数据,那么use NumPy instead of lists 是一个好主意,以实现高效操作。

【讨论】:

  • 这很有用,我会学习它以备将来使用,我感谢你,但包含许多我不熟悉的方面。我曾与 numpy 合作过,但对于这种情况
  • (必须重新添加注释,因为某些事情失败了)矩阵值是文件中的整个矩阵正确吗?,结果 = [] 是一个虚拟变量吗? line.strip.split工作?我以前使用过 numpy 并且知道它的某些方面,但是对于基于某个数字从矩阵中取出行,我不知道如何在 numpy 中做到这一点。
  • 我添加了几个 cmets。那里的大多数东西都很基础,所以在深入了解复杂的东西之前,先尝试学习你的基本 Python 技能。它将避免不必要的头痛。我推荐“The Quick Python Book”@Krios101
【解决方案2】:

您可以使用 numpy 的布尔索引功能

>>> import numpy as np
>>> data = np.array([[1, 2, 3, 4], 
                     [3, 6, 5, 4], 
                     [3, 2, 9, 8], 
                     [5, 3, 0, 8], 
                     [4, 6, 9, 5], 
                     [7, 3, 4, 7]])

>>> print(data[data[:,1] == 3, :])
[[5 3 0 8]
 [7 3 4 7]]

【讨论】:

    猜你喜欢
    • 2019-04-12
    • 2019-10-19
    • 1970-01-01
    • 2012-07-22
    • 2016-04-06
    • 2017-03-16
    • 1970-01-01
    相关资源
    最近更新 更多