【问题标题】:Generating a random line on a 2d array in python在python中的二维数组上生成随机线
【发布时间】:2021-12-15 05:26:38
【问题描述】:

我有一个 2d 零数组:250 x 250。我想生成一个特定长度的随机直随机线(尚未决定)。显然,由于它是一条线,因此从零变为一的值必须以某种方式连接,垂直、水平或对角线;它也必须是直的。我怎么能这样做?我很困惑这个问题,任何帮助将不胜感激。

【问题讨论】:

  • 请把你的代码尝试一下。
  • 所以“二维数组上的线”是指数组就像(零/白色)像素的图像,您想通过更改像素(变为一个/黑色)来绘制一条线?你只能近似一个特定的长度(和角度),像素沿角度调整的方式也是近似的。为您可能提出的任何近似规则创建一个函数不会太难,但使用一些现有的图像编辑库可能会更简单。
  • 你的意思是在你的二维数组中某处有一条随机长度的线N,这条线可以是任何角度吗?
  • 您可以使用 python 库 PIL 来完成。 PIL 是一个处理图像的库,也可以做简单的绘图。您可以在图像和 numpy 数组之间进行转换。如果你想在没有库的情况下自己做,那可能会非常棘手。在这种情况下,我建议进行一些研究,进行一些尝试并发布您拥有的代码。

标签: python arrays numpy random


【解决方案1】:

我们可以做到:

import numpy as np
SIZE = 250
arr = np.zeros((SIZE, SIZE))
M_POS = np.arange(-SIZE, SIZE)
M_POS = np.r_[M_POS,  1 / M_POS[M_POS!=0]]
M = np.random.choice(M_POS, 1)[0]
N = np.random.choice(np.arange(-SIZE, SIZE), 1)[0]
L = 50
P0 = np.array([0, N])
X_Y  = np.array([1, 1 / M]) if abs(M) < 1 else np.array([1, M])
draw_in = np.add(np.repeat([P0], L, axis=0), 
                 np.repeat([X_Y], L, axis=0) * np.arange(L)[:, np.newaxis]).astype(int)
draw_in = draw_in[((draw_in < SIZE) & (draw_in>0)).all(axis=1)]
arr[draw_in[:, 0], draw_in[:, 1]] = 1

【讨论】:

  • 谢谢,帮了大忙!
  • 欢迎您:) 我很高兴为您提供帮助 您可以考虑接受答案吗? @Koza Kurumlu ?
猜你喜欢
  • 1970-01-01
  • 2015-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-28
  • 1970-01-01
相关资源
最近更新 更多