为 numpy 数组项设置新值可节省更小的值。如何设置值?

Setting a new value for a numpy array item saves a much smaller value. How to just set the value?

提问人:questionto42 提问时间:11/18/2023 更新时间:11/18/2023 访问量:24

问:

法典:

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 数组项值,而只保存一个随机且微小的值,以用于各种数字大小。如何解决这个问题?

数组 python-3.x numpy

评论


答:

1赞 questionto42 11/18/2023 #1

我之所以分享这个,是因为有一段时间我不知道发生了什么,尽管如果你看这样的小例子,乍一看似乎很清楚。在更大的代码中,这些东西可以隐藏一段时间。

您需要将数据类型从 uint8 (--> unsigned int 更改为 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)

评论

2赞 hpaulj 11/18/2023
当将 vslues 分配给数组时,例如 ,被强制转换以匹配 的 。大多数情况下,当人们计算一个浮点数并将其分配给一个 int 数组时,这是一个问题。它可能发生在字符串上,例如“U2”截断较长的字符串。另一方面,列表可以混合使用多种类型。Pandas 还可以更改系列 dtype。a[0]=bbdtypea