相关疑难解决方法(0)

从NumPy ndarray中选择行

我想根据第二列中的值仅选择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)

python numpy

24
推荐指数
3
解决办法
7万
查看次数

有效地删除numpy图像数组的行/列

我试图从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的文档

python matlab numpy image image-processing

2
推荐指数
1
解决办法
5780
查看次数

标签 统计

numpy ×2

python ×2

image ×1

image-processing ×1

matlab ×1