gpt4 book ai didi

algorithm - 根据地 block 总数确定子地 block 面积

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:14:35 28 4
gpt4 key购买 nike

当我知道我需要的地 block 总数并且我希望排列是一个正方形(可能有一些空的子地 block )时,我正在尝试弄清楚如何计算子地 block 尺寸。

例如,如果我需要 22 个子图,那么我会为总共 25 个子图制作一个 5x5 的网格,然后将其中三个留空。

所以我想我正在寻找一种算法,例如,我输入 22 并输出 5。任何人都知道在 python 中执行此操作的简短方法(如果可能的话可能是 lambda 函数)?

(也对其他替代方案或预制解决方案持开放态度,我正在为 Pandas 数据帧字典做多个子图矩阵)

最佳答案

这应该适用于您正在尝试做的事情。我没有尝试使用 lambda 函数进行任何操作,但我怀疑修改它会很困难。不会有任何空图,因为一旦超出要绘制的值,算法就会停止。

我将字典分解为键和值列表,因为我在编写本文时最初使用的是列表。 try 子句之前的所有内容都可以在不将您的值转换为列表的情况下工作。如果您想用空图填充而不是使用有点 hack-y break_test 位,您可以将子图的所有代码放在 try 子句中。

怪异破解版:

fig = plt.figure()

# Makes organizing the plots easier
key_list, val_list = [k, v for k, v in dict.getitems()]

# We take advantage of the fact that int conversions always round down
floor = int(np.sqrt(len(val_list))

# If the number of plots is a perfect square, we're done.
# Otherwise, we take the next highest perfect square to build our subplots
if floor ** 2 == len(val_list):
sq_chk = floor
else:
sq_chk = floor + 1

plot_count = 0

# The try/except makes sure we can gracefully stop building plots once
# we've exhausted our dictionary values.
for i in range(sq_chk):
for j in range(sq_chk):
try:
break_test = val_list[plot_count]
except:
break

ax = fig.add_subplot(sq_chk, sq_chk, plot_count + 1)
ax.set_title(key_list[plot_count])

...
# Whatever you want to do with your plots
...

plot_count += 1

plt.show()

无中断版本:

fig = plt.figure()
key_list, val_list = [k, v for k, v in dict.getitems()]

floor = int(np.sqrt(len(dict))

if floor ** 2 == len(dict):
sq_chk = floor
else:
sq_chk = floor + 1

plot_count = 0

# Everything from the original snippet should be nested in the try clause
for i in range(sq_chk):
for j in range(sq_chk):
try:

ax = fig.add_subplot(sq_chk, sq_chk, plot_count + 1)
ax.set_title(key_list[plot_count])

...
# Whatever you want to do with your plots
...

plot_count += 1

except:
plot_count +=1

plt.show()

关于algorithm - 根据地 block 总数确定子地 block 面积,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43025705/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com