【问题标题】:How to control the buffer size for numpy array elements?如何控制 numpy 数组元素的缓冲区大小?
【发布时间】:2014-01-22 16:22:24
【问题描述】:

这里的想法是动态增加数组的大小(行 X 列)(使用 hstack 和 vstack)。但是,我不知道要在数组的特定位置写入的字符串的长度,此时我必须增加大小。因此,未知元素被初始化为例如' ' 或 0 或类似的东西。

如果占位符太短,这会导致错误:

x = array([["1;", "2;"],["3;", "4;"]])
x[0][0] = "1234567890;"
print x

交付:

[['12' '2;']
 ['3;' '4;']]

[0][0] 位置缺少许多字符, 而

x = array([["1;", "2;"],["abcdefghij;", "4;"]])
x[0][0] = "1234567890;"
print x

提供所需的结果,即:

[['1234567890;' '2;']
 ['abcdefghij;' '4;']]

我们如何在 Python 中处理这个问题?非常感谢!

【问题讨论】:

  • 为什么使用 numpy 数组而不是列表(或列表列表)?
  • 我没有考虑使用嵌套列表,因为我没想到这里会有任何困难。你会推荐嵌套列表的方式吗?如果是,为什么?谢谢!
  • 还有你为什么把一个 numpy 当作一个列表来使用?
  • 这可能是由于我缺乏编程技能。选择 numpy 数组的主要原因是 vstack 和 hstack 方法。不过,没有它们你也可以做到。
  • 这是我自己经常怀念的东西,但说出你最终想要达到的(背后的基本问题)会让你以最精确的方式获得帮助

标签: python arrays numpy size buffer


【解决方案1】:

我相信 Numpy 数组对于处理非数字类型并不是那么好,但如果你仍然想使用它,这是你可以做的。

您可以手动将数组的 dtype 设置为 object'S#' 其中 # 将是最大字符数。

In [19]: x = np.array([["1;", "2;"],["3;", "4;"]], dtype=object)

In [20]: x
Out[20]:
array([['1;', '2;'],
       ['3;', '4;']], dtype=object)

In [21]: x[0,0] = "1234567890;"

In [22]: x
Out[22]:
array([['1234567890;', '2;'],
       ['3;', '4;']], dtype=object)


In [24]: x = np.array([["1;", "2;"],["3;", "4;"]], dtype='S64')

In [25]: x
Out[25]:
array([['1;', '2;'],
       ['3;', '4;']],
      dtype='|S64')

In [26]: x[0,0] = "1234567890;"

In [27]: x
Out[27]:
array([['1234567890;', '2;'],
       ['3;', '4;']],
      dtype='|S64')

【讨论】:

  • 看起来不错,非常感谢!我明天要试试这个。但是,正如您所说,numpy 数组不是处理非数字类型的最佳选择,您是否建议使用嵌套列表或其他东西?
猜你喜欢
  • 2013-04-12
  • 1970-01-01
  • 2021-02-07
  • 2022-11-11
  • 1970-01-01
  • 2012-05-10
  • 2021-06-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多