Python 将numpy数组的值更改为其他数据类型

Python 将numpy数组的值更改为其他数据类型,python,numpy,types,Python,Numpy,Types,我有以下代码试图将矩阵上的数字4(如果4被滚动)更改为“x”。这可以通过Python列表完成,但是numpy数组需要相同的数据类型。有没有一个变通办法,可以让我达到同样的效果 代码 import numpy as np matrix=np.array([[9,10,11,12],[8,7,6,5],[1,2,3,4]]) print(matrix) def round1(): rolldice=int(input("Roll Dice:")) print("You have

我有以下代码试图将矩阵上的数字4(如果4被滚动)更改为“x”。这可以通过Python列表完成,但是numpy数组需要相同的数据类型。有没有一个变通办法,可以让我达到同样的效果

代码

import numpy as np 

matrix=np.array([[9,10,11,12],[8,7,6,5],[1,2,3,4]])
print(matrix)

def round1():
    rolldice=int(input("Roll Dice:"))
    print("You have rolled:",rolldice)
    if rolldice<=4:
        matrix[2,rolldice-1]="X"
        print(matrix)
    else:
        print("Greater than 3")

round1()
将numpy导入为np
矩阵=np.数组([[9,10,11,12],[8,7,6,5],[1,2,3,4])
打印(矩阵)
def round1():
掷骰子=整数(输入(“掷骰子:”)
打印(“您已滚动:”,滚动骰子)

如果使用NumPy的蒙版数组实用程序rolldice,您可能可以实现相同的功能,如下所示:

In [1]: matrix = np.ma.array([[9,10,11,12],[8,7,6,5],[1,2,3,4]])

In [2]: matrix
Out[2]:
masked_array(data =
 [[ 9 10 11 12]
 [ 8  7  6  5]
 [ 1  2  3  4]],
             mask =
 False,
       fill_value = 999999)

In [3]: matrix.mask |= matrix.data == 4

In [4]: matrix
Out[4]:
masked_array(data =
 [[9 10 11 12]
 [8 7 6 5]
 [1 2 3 --]],
             mask =
 [[False False False False]
 [False False False False]
 [False False False  True]],
       fill_value = 999999)

In [5]: matrix.mask |= matrix.data == 9

In [6]: matrix
Out[6]:
masked_array(data =
 [[-- 10 11 12]
 [8 7 6 5]
 [1 2 3 --]],
             mask =
 [[ True False False False]
 [False False False False]
 [False False False  True]],
       fill_value = 999999)

如链接问题中所示,数组中不能有混合类型。您可以使用
对象
数据类型,尽管这可能会使其他事情(例如算术运算等)复杂化。你不能用一些“特殊”值来表示X吗(比如你说的0,或者-1之类的)?为什么它必须是字符串?你考虑过NumPy的屏蔽数组吗?这听起来正是它们的用例。
matrix=np。数组([[9,10,11,12],[8,7,6,5],[1,2,3,4],[dtype=object])
可以满足您的需求,但我认为这不是一个好主意。
X
似乎是一个演示细节,而不是一个数据项。
if rolldice<=4:
    matrix[2,rolldice-1]=0
In [1]: matrix = np.ma.array([[9,10,11,12],[8,7,6,5],[1,2,3,4]])

In [2]: matrix
Out[2]:
masked_array(data =
 [[ 9 10 11 12]
 [ 8  7  6  5]
 [ 1  2  3  4]],
             mask =
 False,
       fill_value = 999999)

In [3]: matrix.mask |= matrix.data == 4

In [4]: matrix
Out[4]:
masked_array(data =
 [[9 10 11 12]
 [8 7 6 5]
 [1 2 3 --]],
             mask =
 [[False False False False]
 [False False False False]
 [False False False  True]],
       fill_value = 999999)

In [5]: matrix.mask |= matrix.data == 9

In [6]: matrix
Out[6]:
masked_array(data =
 [[-- 10 11 12]
 [8 7 6 5]
 [1 2 3 --]],
             mask =
 [[ True False False False]
 [False False False False]
 [False False False  True]],
       fill_value = 999999)