小编a.s*_*iet的帖子

numpy数组的边界框

假设您有一个2D numpy数组,其中包含一些随机值和周围的零.

示例"倾斜矩形":

import numpy as np
from skimage import transform

img1 = np.zeros((100,100))
img1[25:75,25:75] = 1.
img2 = transform.rotate(img1, 45)
Run Code Online (Sandbox Code Playgroud)

现在我想找到所有非零数据的最小边界矩形.例如:

a = np.where(img2 != 0)
bbox = img2[np.min(a[0]):np.max(a[0])+1, np.min(a[1]):np.max(a[1])+1]
Run Code Online (Sandbox Code Playgroud)

实现这一结果的最快方法是什么?我确信有更好的方法,因为如果我使用1000x1000数据集,np.where函数需要相当长的时间.

编辑:还应该在3D中工作......

python arrays numpy transformation

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

在 matplotlib 中获取颜色条的刻度值

如何将matplotlib颜色条当前显示的刻度提取为列表?通过这个例子,我应该得到带有浮点数的列表[-0.6, -0.4, -0.2, 0, 0.2, 0.4, 0.6]

import matplotlib.pyplot as plt
import numpy as np

img = np.random.normal(0, 0.2, size=(100,100))
plt.imshow(img)
plt.colorbar()
plt.show()
Run Code Online (Sandbox Code Playgroud)

python matplotlib colorbar

7
推荐指数
2
解决办法
4482
查看次数

KDTree中的python点索引

给定一个点列表,如何在 KDTree 中获取它们的索引?

from scipy import spatial
import numpy as np

#some data
x, y = np.mgrid[0:3, 0:3]
data = zip(x.ravel(), y.ravel())

points = [[0,1], [2,2]]

#KDTree
tree = spatial.cKDTree(data)

# incices of points in tree should be [1,8]
Run Code Online (Sandbox Code Playgroud)

我可以做这样的事情:

[tree.query_ball_point(i,r=0) for i in points]

>>> [[1], [8]]
Run Code Online (Sandbox Code Playgroud)

这样做有意义吗?

python kdtree scipy

5
推荐指数
1
解决办法
1162
查看次数

scipy中的距离变换算法

由于距离变换有很多不同的算法(参见这里的例子),我很难理解 scipy 的 distance_transform_edt 和 distance_transform_bf 是如何工作的。是否有任何可用的详细说明?

python scipy

5
推荐指数
1
解决办法
1581
查看次数

如何使用掩码仅替换 numpy 数组的零

考虑一个二维数组:

arr = np.zeros((10,10))
arr[3:7,3:7] = 1
Run Code Online (Sandbox Code Playgroud)

现在我想使用掩码将其中的一部分替换为其他值:

mask = np.ones((5,5)).astype(bool)
arr[5:,5:][mask] = 2
Run Code Online (Sandbox Code Playgroud)

是否可以保留原始文件中的非零元素arr并使用掩码仅替换零元素?我想避免通过平面索引来这样做,因为我处理的数组是大型 3D 数组(大约 1000x1000x1000)。

编辑:一些附加信息:

我想避免更改掩码,这包括在数组非零的情况下将其设置为 False 以及调整其大小。原因是该操作需要重复多次,并将掩模放置在阵列的不同区域。由于数组非常大,因此最好避免复制数据。

python numpy

5
推荐指数
1
解决办法
8775
查看次数

python:将浮点数向上舍入到下一个奇数

我如何能圆一个FLOAD 下一个奇数.我发现在这里偶数可以做到这一点.所以我尝试了类似的东西:

import numpy as np

def round_up_to_odd(f):
    return np.ceil(f / 2.) * 2 + 1
Run Code Online (Sandbox Code Playgroud)

但当然这不会将其舍入到NEXT奇数:

>>> odd(32.6)
35.0
Run Code Online (Sandbox Code Playgroud)

有什么建议?

python numpy rounding

4
推荐指数
2
解决办法
5764
查看次数

numpy数组上的边界/边运算

假设我有一个非零值的3D numpy数组"background" = 0.作为一个例子,我将采用随机值的范围:

array = np.random.randint(1, 5, size = (100,100,100))
z,y,x = np.ogrid[-50:50, -50:50, -50:50]
mask = x**2 + y**2 + z**2<= 20**2
array[np.invert(mask)] = 0
Run Code Online (Sandbox Code Playgroud)

首先,我想找到"边界体素"(所有非零值在其3x3x3邻居中都为零).其次,我想用非零邻居的平均值替换所有边界体素.到目前为止,我尝试以下列方式使用scipy的通用过滤器:

适用于每个元素的功能:

def borderCheck(values):
    #check if the footprint center is on a nonzero value
    if values[13] != 0:
        #replace border voxels with the mean of nonzero neighbours
        if 0 in values:
            return np.sum(values)/np.count_nonzero(values)
        else:
            return values[13]
    else:
        return 0
Run Code Online (Sandbox Code Playgroud)

通用过滤器:

from scipy import ndimage
result = ndimage.generic_filter(array, borderCheck, footprint …
Run Code Online (Sandbox Code Playgroud)

python numpy scipy

3
推荐指数
1
解决办法
5631
查看次数

matplotlib 标签和图例中的“半空间”

如何在 matplotlib 标签或图例的文本中插入半个空格,例如在数字及其单位之间?一个简单的解决方法是使用 Latex 渲染,但是还有其他方法吗,例如使用 unicode 字符?

python matplotlib

3
推荐指数
2
解决办法
2494
查看次数