如何更改 numpy 数组中值的位置?

Posted

技术标签:

【中文标题】如何更改 numpy 数组中值的位置?【英文标题】:How can i change position of value in numpy array? 【发布时间】:2022-01-08 09:28:42 【问题描述】:

如何通过 numpy 数组中的坐标(x,y)更改 green circle 的位置?

import numpy as np
matrix = np.array(
    [
        ['????', '⬛', '⬛', '⬛'],
        ['⬛', '⬛', '⬛', '⬛'],
        ['⬛', '⬛', '⬛', '⬛'],
        ['⬛', '⬛', '⬛', '⬛']
    ]
)

x, y = tuple(zip(*np.where(matrix=='????')))[0]
yield "\n".join("".join(x for x in i) for i in matrix)

【问题讨论】:

存储该圆的索引可能很方便。当你移动它时,用一个正方形替换原来的,并在新的空间中创建一个新的。 你所说的改变是什么意思?你给坐标和绿色圆圈“去”在新的位置,而旧的恢复到正方形? 是的,我试着去做 【参考方案1】:

您可以将旧位置设置为方形,将新位置设置为圆形:

old_pos = (0,0)
new_pos = (1,2)

def change_pos(matrix,old,new):
    matrix[old] = '⬛'
    matrix[new] = '?'
change_pos(matrix, old_pos, new_pos)
matrix

输出:

array([['⬛', '⬛', '⬛', '⬛'],
       ['⬛', '⬛', '?', '⬛'],
       ['⬛', '⬛', '⬛', '⬛'],
       ['⬛', '⬛', '⬛', '⬛']], dtype='<U1')

使用类

如果你的目标是制作某种游戏,你应该为你的棋盘使用一个类:

import numpy as np
class Matrix():
    def __init__(self, pos=(0,0), size=(3,3)):
        self.pos = pos
        self.matrix = np.empty(size, dtype='<U1')
        self.matrix[:,:] = '⬛'
        self.matrix[pos] = '?'
    
    def __repr__(self):
        return self.matrix.__repr__()
    
    def __str__(self):
        return self.matrix.__str__()
    
    def change_pos(self, new):
        self.matrix[self.pos] = '⬛'
        self.matrix[new] = '?'
        self.pos = new

示例:

m = Matrix()
print(m)

m.change_pos((2,1))
print(m)

【讨论】:

@RAINGM 如果您的目标是制作某种游戏,请查看更新,您可能会喜欢它;) 它更好,谢谢【参考方案2】:

import numpy as np
matrix = np.array(
    [
        ['?', '⬛', '⬛', '⬛'],
        ['⬛', '⬛', '⬛', '⬛'],
        ['⬛', '⬛', '⬛', '⬛'],
        ['⬛', '⬛', '⬛', '⬛']
    ]
)
def change_green(x, y):
    x1, y1 = tuple(zip(*np.where(matrix=='?')))[0]
    matrix[x1][y1] = '⬛'
    matrix[x][y] = '?'
change_green(1, 1)
print(matrix)

结果:

[
        ['⬛', '⬛', '⬛', '⬛'],
        ['⬛', '?', '⬛', '⬛'],
        ['⬛', '⬛', '⬛', '⬛'],
        ['⬛', '⬛', '⬛', '⬛']
    ]

【讨论】:

以上是关于如何更改 numpy 数组中值的位置?的主要内容,如果未能解决你的问题,请参考以下文章

用中值替换numpy数组中的零

如何使用 numpy 或 pandas 创建(或更改)数组/列表的维度?

如何更改 tensorflow 的 numpy 数组的 dtypes

如何对特定行上的 numpy 数组进行排序,其他行相应更改? [复制]

如何在二维 numpy 数组中搜索特定 XY 对的位置?

如何为 numpy 数组创建圆形掩码?