python - 在 Python 中进入 for 循环之前的函数分配
问题描述
在下面的示例代码中,我想ps x ps
用零、一或随机数替换大量图像中大小的补丁。这是一个例子:
为了保持 for 循环干净、快速且 python 脚本简短,我想patch_fct
在进入 for 循环之前定义一个函数,它可以完成这项工作。不幸的是,这些函数np.zeros
和np.ones
不同之处np.random.rand
在于np.random.randn
它们采用不同的参数来定义输出的大小。对于 2x2 矩阵,我执行以下操作来获得一个矩阵:
np.ones((2,2))
我愿意
np.random.rand(2,2)
如果我想要一个带有随机数的矩阵。
这是一个完整的示例代码。如果我patch_fct((ps,ps))
在 for 循环中使用,它只适用于“一”和“零”。为了处理随机数,我必须将该行更改为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
:
这是一个便利功能。如果您想要一个将 shape-tuple 作为第一个参数的接口,请参阅
np.random.random_sample
.
对于np.random.randn
:
这是一个便利功能。如果您想要一个将元组作为第一个参数的接口,请
numpy.random.standard_normal
改用。
推荐阅读
- docker - 在 VSCode 远程容器会话中覆盖 UID GID
- regex - Powershell正则表达式替换两个相同字符之间的特定字符
- flutter - 获取 dart 中当前脚本的路径
- google-apps-script - 如何查看 Google 表格添加的历史记录
- r - 将“-”中的字符串和大写字母更改为R中的无大写字母和空格
- java - UserFactory 对 User 对象的填充数据是否违反了 DRY?
- javascript - 使用 spotify api (reactJS) 显示我所在地区的播放列表
- reactjs - GraphQL 适用于 Postman,但不适用于 React - 使用 Django API
- vee-validate - 如何使用 veevalidate 和 CDN 验证输入字段
- powerapps - 我想要一个按钮来导航到表单,但是当我单击按钮时它没有显示表单