我想根据第二列中的值仅选择NumPy数组中的某些行.例如,此测试数组在第二列中具有从1到10的整数.
>>> test = numpy.array([numpy.arange(100), numpy.random.randint(1, 11, 100)]).transpose()
>>> test[:10, :]
array([[ 0, 6],
[ 1, 7],
[ 2, 10],
[ 3, 4],
[ 4, 1],
[ 5, 10],
[ 6, 6],
[ 7, 4],
[ 8, 6],
[ 9, 7]])
Run Code Online (Sandbox Code Playgroud)
如果我只想要第二个值为4的行,那么很容易:
>>> test[test[:, 1] == 4]
array([[ 3, 4],
[ 7, 4],
[16, 4],
...
[81, 4],
[83, 4],
[88, 4]])
Run Code Online (Sandbox Code Playgroud)
但是当有多个想要的值时,我如何获得相同的结果呢?
通缉名单可以是任意长度.例如,我可能想要第二列为2,4或6的所有行:
>>> wanted = [2, 4, 6]
Run Code Online (Sandbox Code Playgroud)
我提出的唯一方法是使用列表推导,然后将其转换回数组并且看起来太复杂,尽管它有效:
>>> test[numpy.array([test[x, 1] in wanted for x …Run Code Online (Sandbox Code Playgroud) 我试图从Numpy数组表示的图像中删除行或列.我的图片类型为uint16和2560 x 2176.举个例子,假设我要删除前16列,使其成为2560 x 2160.
我是MATLAB-to-Numpy转换器,在MATLAB中会使用类似的东西:
A = rand(2560, 2196);
A(:, 1:16) = [];
Run Code Online (Sandbox Code Playgroud)
据我了解,这将删除列,并通过不复制到新数组节省大量时间.
对于Numpy,以前的帖子使用了像numpy.delete.但是,文档很清楚,这会返回一个副本,所以我必须将副本重新分配给A.这似乎会浪费很多时间复制.
import numpy as np
A = np.random.rand(2560,2196)
A = np.delete(A, np.r_[:16], 1)
Run Code Online (Sandbox Code Playgroud)
这真的和就地删除一样快吗?我觉得我必须错过一个更好的方法或不了解python如何在删除期间处理数组存储.
相关的先前帖子:有效
删除NumPy中的行
numpy.delete的文档