在下面的示例代码中,我想用0、1或随机数替换大量图像中大小为ps x ps
的补丁。举个例子:
为了保持for循环的干净、快速和python脚本的简短,我想在进入for循环之前定义一个函数patch_fct
,它完成了这项工作。不幸的是,函数np.zeros
和np.ones
与np.random.rand
和np.random.randn
的不同之处在于它们采用不同的参数来定义输出的大小。对于2x2矩阵,我执行以下操作以获得一个包含1的矩阵:
np.ones((2,2))
我知道
np.random.rand(2,2)
如果我想要一个随机数的矩阵。你知道吗
下面是一个完全有效的示例代码。如果我在for循环中使用patch_fct((ps,ps))
,它只适用于“1”和“0”。为了处理随机数,我必须将该行更改为patch_fct(ps,ps)
。你知道吗
有什么办法吗?你知道吗
import numpy as np
import matplotlib.pyplot as plt
n_images = 100
w_size = 30
h_size = 30
patch_type = "ones"
ps = 4
images = -np.ones((n_images, h_size, w_size))
x0 = np.random.randint(0, w_size - ps, n_images)
y0 = np.random.randint(0, h_size - ps, n_images)
if patch_type == "zeros":
patch_fct = np.zeros
elif patch_type == "ones":
patch_fct = np.ones
elif patch_type == "rand":
patch_fct = np.random.rand
elif patch_type == "randn":
patch_fct = np.random.randn
else:
raise "Error patch type"
for i, x, y, x1, y1 in zip(range(n_images), x0, y0, x0 + ps, y0 + ps):
images[i, x:x1, y:y1] = patch_fct((ps,ps)) # <-- PROBLEM:
for k in range(25):
plt.subplot(5,5,k+1)
plt.imshow(images[k])
plt.axis("off")
plt.show()
有采用元组的预定义函数:
阅读文档
np.random.rand
:对于
np.random.randn
:相关问题 更多 >
编程相关推荐