为NumPy数组项设置一个新值会保存一个小得多的值,我如何只设置值?

klsxnrf1  于 12个月前  发布在  其他
关注(0)|答案(1)|浏览(120)

代码:

import numpy as np
data = '12345\n54321\n13542\n12354\n53124'
n = data.find('\n')
mat = np.array(list(data.replace('\n','')), dtype=np.uint8).reshape(-1, n)
mat

字符串
输出:

array([[1, 2, 3, 4, 5],
       [5, 4, 3, 2, 1],
       [1, 3, 5, 4, 2],
       [1, 2, 3, 5, 4],
       [5, 3, 1, 2, 4]], dtype=uint8)


代码:

mat2 = np.full_like(mat, 0)
mat2[0,0] = 9999999
mat2[0,1] = 8888
mat2[0,2] = 77777


输出:

array([[127, 184, 209,   0,   0],
       [  0,   0,   0,   0,   0],
       [  0,   0,   0,   0,   0],
       [  0,   0,   0,   0,   0],
       [  0,   0,   0,   0,   0]], dtype=uint8)


因此,Python没有设置所需的NumPy数组项值,只保存了一个随机的小值,而不是大范围的数字大小。我如何解决这个问题?

dtcbnfnu

dtcbnfnu1#

我分享这个,因为我不知道发生了什么事一段时间,即使它似乎是如此清晰,如果你看一个小的例子,这样的第一眼。在一个较大的代码,这样的事情可以隐藏了一段时间。
你需要将数据类型从uint 8(--> unsigned int,8位是你需要为数组选择的最小值。这就是为什么我首先选择它来存储一些小值)更改为可以保存较大值的数据类型。例如:

mat2 = np.full_like(mat, 0).astype('uint32')
mat2[0,2] = 77777
mat2

字符串
输出:

array([[    0,     0, 77777,     0,     0],
       [    0,     0,     0,     0,     0],
       [    0,     0,     0,     0,     0],
       [    0,     0,     0,     0,     0],
       [    0,     0,     0,     0,     0]], dtype=uint32)

相关问题