如何控制numpy数组元素的缓冲区大小?

时间:2014-01-22 16:22:24

标签: python arrays numpy size buffer

这里的想法是动态增加数组的大小(行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中处理这个问题?非常感谢提前!

1 个答案:

答案 0 :(得分: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')