在Python中进入forloop之前的函数赋值

2024-04-25 22:25:51 发布

您现在位置:Python中文网/ 问答频道 /正文

在下面的示例代码中,我想用0、1或随机数替换大量图像中大小为ps x ps的补丁。举个例子:

enter image description here

为了保持for循环的干净、快速和python脚本的简短,我想在进入for循环之前定义一个函数patch_fct,它完成了这项工作。不幸的是,函数np.zerosnp.onesnp.random.randnp.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()

Tags: forsizetypenponeszerosplt矩阵
1条回答
网友
1楼 · 发布于 2024-04-25 22:25:51

有采用元组的预定义函数:

阅读文档np.random.rand

This is a convenience function. If you want an interface that takes a shape-tuple as the first argument, refer to np.random.random_sample .


对于np.random.randn

This is a convenience function. If you want an interface that takes a tuple as the first argument, use numpy.random.standard_normal instead.

相关问题 更多 >

    热门问题