首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何处理这个3Dnumpy数组的前两个维度?

如何处理这个3Dnumpy数组的前两个维度?
EN

Stack Overflow用户
提问于 2019-12-03 13:08:15
回答 3查看 312关注 0票数 2

我正在开发一个程序,在这个程序中,我想要显示一张图片,并对像素进行随机化(然后,希望将它们排序回原位)。我找到一个教程,它使用array3d将图像作为像素加载到3D数组中(行、列、RGB值)。numpy.random.shuffle()仅对顶部维度进行置乱。有没有一种简单的方法可以同时处理行和列,就像它们在同一维中一样(而不会篡改第三维,即颜色值)?

代码语言:javascript
复制
import pygame
import numpy as np

pygame.init()

image = pygame.image.load('smiley.png')
# The pixels we will manipulate.
pixels = pygame.surfarray.array3d(image)

# Set up window
w, h = pixels.shape[0], pixels.shape[1]
display_surface = pygame.display.set_mode((w, h))

while True:
    # Draw array onto screen
    pygame.surfarray.blit_array(display_surface, pixels)

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            quit()
        elif event.type == pygame.KEYDOWN:
            if event.key == pygame.K_s:
                # Scramble the pixels
                np.random.shuffle(pixels)

        pygame.display.update()

我可以遍历每一行,并对它们进行置乱,但实际上,我希望对每个x,y像素进行置乱,就好像它们是同一个数组一样。我是numpy的初学者。我可以将3D数组转置为2D数组,对其进行混洗,然后再转置回3D数组吗?我是不是想多了?谢谢你的帮忙!

EN

回答 3

Stack Overflow用户

发布于 2019-12-03 13:47:05

你试过像这样的东西吗?

代码语言:javascript
复制
np.random.shuffle(pixels)
np.random.shuffle(np.swapaxes(pixels, 0, 1))

?Shuffle是就地的,并且swapaxes返回一个视图,因此它的功能应该如您所描述的那样。

票数 1
EN

Stack Overflow用户

发布于 2019-12-03 13:39:38

如果我没理解错的话,你要找的东西是:

代码语言:javascript
复制
import numpy as np

# create an 3x3 array like your picture:
pixels= np.arange(27).reshape((3, 3, 3))

# shuffle dimension 2:
for i in range(0, pixels.shape[0]):
    np.random.shuffle(pixels[i][:])
    pixels= pixels.copy()

# shuffle dimension 1:
np.random.shuffle(pixels[:])

# output:
pixels
票数 0
EN

Stack Overflow用户

发布于 2019-12-03 14:44:17

添加第二个答案,以便您可以选择。我认为这个可能更慢(但实际上在所有坐标中是随机的)。

代码语言:javascript
复制
np.random.shuffle(np.reshape(pixels, -1))

如果出于某种原因,它是一个新对象而不是视图,则必须执行以下操作

代码语言:javascript
复制
pixels = np.reshape(np.random.shuffle(np.reshape(pixels, -1)), (w, h, -1))

而不是。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59150496

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档