gpt4 book ai didi

python - Numpy字符串数组,赋值

转载 作者:行者123 更新时间:2023-12-05 01:12:56 28 4
gpt4 key购买 nike

我正在处理用字符串填充的 numpy 数组。我的目标是分配给第一个数组 a 的切片,值包含在较小尺寸的第二个数组 b 中。

我想到的实现如下:

import numpy as np

a = np.empty((10,), dtype=str)

b = np.array(['TEST' for _ in range(2)], dtype=str)

print(b)

a[1:3] = b

print(a)

print(b) 按预期返回 ['TEST' 'TEST']

然后 print(a) 返回 ['' 'T' 'T' '' '' '' '' '' '' '']。因此,来自 b 的值没有正确分配给 a 的切片。

知道是什么导致了这种魔法吗?

谢谢!

最佳答案

您可以将其视为溢出的一种形式。

查看数组的确切类型:

>>> a.dtype
dtype('<U1') # Array of 1 unicode char
>>> b.dtype
dtype('<U4') # array of 4 unicode chars

当您定义一个字符串数组时,numpy 会尝试推断它可以包含您定义的所有元素的最小字符串大小。

  • 对于 a ,1个字符就足够了
  • 对于 bTEST 的长度为 4 个字符

然后,当您为字符串数组的任何新元素分配新值时,numpy 会将新值截断为数组的容量。这里只保留TEST的首字母T

与你的切片操作无关:

a = np.zeros(1, dtype=str)
a[0] = 'hello world'
print(a[0])
# h

如何克服它

  1. 使用对象的 dtype 定义 a:numpy 将不再尝试优化其存储空间,您将获得可预测的行为
  2. 增加 char 数组的大小:a = np.zero(10, dtype='U256') 将每个单元格的容量增加到 256 个字符

关于python - Numpy字符串数组,赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61274344/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com