在2D numpy数组中随机选择索引,了解ChatGPT解决方案

bvpmtnay  于 2024-01-08  发布在  其他
关注(0)|答案(1)|浏览(186)

我让ChatGPT帮助我在加载为numpy数组的图像中随机选择像素。它给我的解决方案实际上工作得很好,但我很难理解它是如何工作的:

  1. from PIL import Image
  2. import numpy as np
  3. img = Image.open('image.png')
  4. pix = np.array(img)
  5. random_pixels = np.random.choice(pix.shape[0]*pix.shape[1], pix.shape[0]*pix.shape[1], replace=False)
  6. selected_pixels = []
  7. for p in random_pixels:
  8. x = p // pix.shape[1]
  9. y = p % pix.shape[1]
  10. selected_pixels.append((x, y))

字符串
我不明白如何整数除法和模运算符应用于图像宽度实际上能够返回所有的坐标。

30byixjq

30byixjq1#

从一个可以实际检查的小数组开始

  1. In [403]: pix=np.arange(12).reshape(3,4)
  2. In [404]: pix
  3. Out[404]:
  4. array([[ 0, 1, 2, 3],
  5. [ 4, 5, 6, 7],
  6. [ 8, 9, 10, 11]])
  7. In [405]: random_pixels = np.random.choice(pix.shape[0]*pix.shape[1], pix.shape[0]*pix.shape[1], replace=False)
  8. ...: print(random_pixels)
  9. ...: selected_pixels = []
  10. ...: for p in random_pixels:
  11. ...: x = p // pix.shape[1]
  12. ...: y = p % pix.shape[1]
  13. ...: print(p,x,y)
  14. ...: selected_pixels.append((x, y))
  15. ...:

字符串
数组是(3,4)形状,choices随机创建了0到11的值。

  1. [ 5 6 9 4 2 8 11 10 0 7 1 3]


迭代获取值p,并从中生成x,y坐标。

  1. 5 1 1
  2. 6 1 2
  3. 9 2 1
  4. 4 1 0
  5. 2 0 2
  6. 8 2 0
  7. 11 2 3
  8. 10 2 2
  9. 0 0 0
  10. 7 1 3
  11. 1 0 1
  12. 3 0 3


实际上,我不需要打印x,y,因为它们已经收集在

  1. In [406]: selected_pixels
  2. Out[406]:
  3. [(1, 1),
  4. (1, 2),
  5. (2, 1),
  6. (1, 0),
  7. (0, 2),
  8. (2, 0),
  9. (2, 3),
  10. (2, 2),
  11. (0, 0),
  12. (1, 3),
  13. (0, 1),
  14. (0, 3)]


你应该能够计算出整数除法和模数如何将p转换为xy。你不需要在循环中运行它。选择任何p和任何shape

展开查看全部

相关问题