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

时间:2018-01-09 13:23:03

标签: 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 rolled:",rolldice)
    if rolldice<=4:
        matrix[2,rolldice-1]="X"
        print(matrix)
    else:
        print("Greater than 3")

round1()

不起作用的行

if rolldice<=4:
    matrix[2,rolldice-1]="X"

什么可行(这会将其改为零)

if rolldice<=4:
    matrix[2,rolldice-1]=0

关于如何做到这一点的任何想法?我只是根据骰子滚动的数字,想要用'x'替换矩阵中的数字。因此,如果3被滚动,则3将被替换为'x'。

另外,我也有兴趣以更有效的方式用基于throw的x替换矩阵中的相关数字,而不使用IF函数。目前,我必须指定如果throw小于4(这是数组中第三个列表的长度),请执行此类操作,否则,我将不得不继续编写另一个替代方法,如果投掷超过4.

1 个答案:

答案 0 :(得分:1)

使用NumPy的掩码数组实用程序,您可以实现相同的功能,如下所示:

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)