从python中的python数组中提取行

时间:2016-07-21 15:33:48

标签: python numpy

我有一个形状为public class Logger { private ActionBlock<string> block; public Logger(string filePath) { block = new ActionBlock<string>(async message => { using(var f = File.Open(filePath, FileMode.OpenOrCreate, FileAccess.Write)) { f.Position = f.Length; using(var sw = new StreamWriter(f)) { await sw.WriteLineAsync(message); } } }, new ExecutionDataflowBlockOptions{MaxDegreeOfParallelism = 1}); } public void Log(string message) { block.Post(message); } } 的numpy数组X

每行的最后一个值可以是(768, 8)0,我只需要值为1的行,并调用此1

我做了:

T

这是正确的,但是,现在这是一个列表,而不是一个numpy数组(实际上我无法打印T = [x for x in X if x[7]==1] )。

我应该怎么做才能让它成为一个numpy数组呢?

2 个答案:

答案 0 :(得分:2)

NumPy的布尔索引以完全向量化的方式完成工作。与使用列表推导和类型转换相比,这种方法通常更有效(并且可以说更优雅)。

T = X[X[:, -1] == 1]

演示:

In [232]: first_columns = np.random.randint(0, 10, size=(10, 7))

In [233]: last_column = np.random.randint(0, 2, size=(10, 1))

In [234]: X = np.hstack((first_columns, last_column))

In [235]: X
Out[235]: 
array([[4, 3, 3, 2, 6, 2, 2, 0],
       [2, 7, 9, 4, 7, 1, 8, 0],
       [9, 8, 2, 1, 2, 0, 5, 1],
       [4, 4, 4, 9, 6, 4, 9, 1],
       [9, 8, 7, 6, 4, 4, 9, 0],
       [8, 3, 3, 2, 9, 5, 5, 1],
       [7, 1, 4, 5, 2, 4, 7, 0],
       [8, 0, 0, 1, 5, 2, 6, 0],
       [7, 9, 9, 3, 9, 3, 9, 1],
       [3, 1, 8, 7, 3, 2, 9, 0]])

In [236]: mask = X[:, -1] == 1

In [237]: mask
Out[237]: array([False, False,  True,  True, False,  True, False, False,  True, False], dtype=bool)

In [238]: T = X[mask]

In [239]: T
Out[239]: 
array([[9, 8, 2, 1, 2, 0, 5, 1],
       [4, 4, 4, 9, 6, 4, 9, 1],
       [8, 3, 3, 2, 9, 5, 5, 1],
       [7, 9, 9, 3, 9, 3, 9, 1]])

答案 1 :(得分:0)

致电

outImg = bsxfun(@times, img, cast(connected, class(img)));

您正在将T = [x for x in X if x[8]==1] 作为列表。要将任何列表转换为numpy数组,只需使用:

T

以下是发生的事情:

T = numpy.array([x for x in X if x[8]==1])