如何替换二维numpy中的元素.在python中使用字符串数组?



我想在下一个条件下改变数组2-D的元素:如果元素>100将此元素更改为单词"true";否则更改单词的元素:"False"。我试着去做,但我做不到。我分享下一个代码。我希望你能帮助我。

import numpy as np
h1 =np.array([[10, 85, 103, 444, 150, 200, 35, 47],      
[532, 476, 0, 1011, 50, 674, 5, 999],
[985, 7, 99, 101, 1, 58, 300, 78],
[750, 649, 86, 8, 505, 41, 745, 187]])
for r in range (0,len(h1)):
for c in range(0,len(h1[0])):
valor = h1[r][c]
if valor > 100:
h1[r][c] = 'True'
else:
h1[r][c] = 'False'

理论上输出应该是:

[[False, False,  True,  True,  True,  True, False, False],
[ True,  True, False,  True, False,  True, False,  True],
[ True, False, False,  True, False, False,  True, False],
[ True,  True, False, False,  True, False,  True,  True]]

你不需要循环,h1 = h1 > 100会完成这项工作

[[False False  True  True  True  True False False]
[ True  True False  True False  True False  True]
[ True False False  True False False  True False]
[ True  True False False  True False  True  True]]

如果你真的想把这些值作为字符串使用astype(str)

h1 = (h1 > 100).astype(str)

为什么for循环?!当阵列为numpy.array时。你可以用numpy.where。如果您有特定的字符串,您可以使用numpy.where并设置任何您喜欢的字符串。

import numpy as np
h1 =np.array([[10, 85, 103, 444, 150, 200, 35, 47],      
[532, 476, 0, 1011, 50, 674, 5, 999],
[985, 7, 99, 101, 1, 58, 300, 78],
[750, 649, 86, 8, 505, 41, 745, 187]])
# as Boolean : np.where(h1>100, True, False)
np.where(h1>100, 'True', 'False')

但是如果只有你想使用'True'或'False',你可以使用astype(str):

>>> (h1>100).astype(str)
array([
['False', 'False', 'True', 'True', 'True', 'True', 'False','False'],
['True', 'True', 'False', 'True', 'False', 'True', 'False','True'],
['True', 'False', 'False', 'True', 'False', 'False', 'True','False'],
['True', 'True', 'False', 'False', 'True', 'False', 'True','True']], 
dtype='<U5')

你可以这样做:

h2 = []
for i in h1: 
x = [True if x >100 else False for x in i]
h2.append(x)

但是正如上面的注释所提到的,有更简单的方法。

我认为I'mahdi的解决方案是最好的,但是如果您想在for循环中继续这样做:

它不适合你的原因是,你的h1是一个二维整数数组。如果改成

h1 =np.array([[BLABLABLA]],dtype = object))

,则可以修改数组。但是要小心,当前您正在使用字符串

设置元素。
"True"

而不是实际的bool

True
所以我可能不会使用"。如果你想更酷一点,确保h1是一个bool数组,我建议你再写一行
h1 = h1.astype(bool)

希望这对你有帮助。如果您有任何问题,请告诉我。

相关内容

  • 没有找到相关文章

最新更新