Python 将numpy数组的值更改为其他数据类型
我有以下代码试图将矩阵上的数字4(如果4被滚动)更改为“x”。这可以通过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
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)