假设您有一个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中工作......
如何将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) 给定一个点列表,如何在 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)
这样做有意义吗?
由于距离变换有很多不同的算法(参见这里的例子),我很难理解 scipy 的 distance_transform_edt 和 distance_transform_bf 是如何工作的。是否有任何可用的详细说明?
考虑一个二维数组:
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 以及调整其大小。原因是该操作需要重复多次,并将掩模放置在阵列的不同区域。由于数组非常大,因此最好避免复制数据。
我如何能圆一个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)
有什么建议?
假设我有一个非零值的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) 如何在 matplotlib 标签或图例的文本中插入半个空格,例如在数字及其单位之间?一个简单的解决方法是使用 Latex 渲染,但是还有其他方法吗,例如使用 unicode 字符?