以下是我要执行的代码
matrix = []
sample = [10,10,'mike','']
for i in range(10):
r = [sample] * 3
matrix.append(r)
matrix = np.array(matrix)
matrix[1][1] = [123,123,'james', 'sdfsdfsdf werwerwer sdfsdfsd werwerwer sdfsdfsdf']
print matrix[1][1]
这就是我得到的
['123' '123' 'james' 'sdfsdfsdf w']
因此基本上由于某种原因修剪了文本。有没有人见过它?
答案 0 :(得分:0)
我发现了问题。
从本机Python数组转换为Numpy应该作为最后一步。
matrix[1][1] = [123,123,'james', 'sdfsdfsdf werwerwer sdfsdfsd werwerwer sdfsdfsdf']
matrix = np.array(matrix)
现在工作正常。
答案 1 :(得分:0)
如果在将列表转换为数组时未指定dtype
,则它将使用默认行为。在您的情况下,您正在混合int和字符串,因此它将默认为unicode< 11:
>>> np.array([1,2,'a'])
array(['1', '2', 'a'],
dtype='<U11')
当您尝试添加长度大于11的新元素时,它将截断为dtype:
>>> x = np.array([1,2,'a'])
>>> x[2] = 'abcdefghijklmnopqrstuvwxyz'
>>> x
array(['1', '2', 'abcdefghijk'],
dtype='<U11')
您可以在创建阵列时指定更高的dtype
来解决此问题:
>>> x = np.array([1,2,'a'], '<U50')
>>> x[2] = 'abcdefhijkmnopqrstuvwxyz'
>>> x
array(['1', '2', 'abcdefhijkmnopqrstuvwxyz'],
dtype='<U50')
答案 2 :(得分:0)
您的解决方案:
matrix[1][1] = [123,123,'james', 'sdfsdfsdf werwerwer sdfsdfsd werwerwer sdfsdfsdf']
matrix = np.array(matrix)
只是因为如果你没有在数组方法中指定数据类型,那么numpy将它设置为可能保存所有数据的最小尺寸。
如果你从一个您输入matrix[1][1]
的interactice python终端获得了:
array(['123', '123', 'james', 'sdfsdfsdf werwerwer s'], dtype='|S21')
dtype表示它是一个长度为21个字符的字符串。这就是为什么你的文字会被截断的原因。实现数组结构时,如果稍后想要增加数据大小,则应提供dtype。
matrix = np.array(matrix, dtype='S50')
matrix[1][1] = [123,123,'james', 'sdfsdfsdf werwerwer sdfsdfsd werwerwer sdfsdfsdf']
print matrix[1][1]
['123' '123' 'james' 'sdfsdfsdf werwerwer sdfsdfsd werwerwer sdfsdfsdf']