Arrays numpy结构化数组的分配问题
我试着在numpy中将代码分配给一个结构化数组,我不确定,但是当我将矩阵分配给我创建的结构化数组中的子数组时,出现了一些错误,如下所示:Arrays numpy结构化数组的分配问题,arrays,numpy,structured-array,Arrays,Numpy,Structured Array,我试着在numpy中将代码分配给一个结构化数组,我不确定,但是当我将矩阵分配给我创建的结构化数组中的子数组时,出现了一些错误,如下所示: new_type = np.dtype('a3,(2,2)u2') x = np.zeros(5,dtype=new_type) x[1]['f1'] = np.array([[1,1],[1,1]]) print x Out[143]: array([('', [[0, 0], [0, 0]]), ('', [[1, 0], [0, 0]]), ('
new_type = np.dtype('a3,(2,2)u2')
x = np.zeros(5,dtype=new_type)
x[1]['f1'] = np.array([[1,1],[1,1]])
print x
Out[143]:
array([('', [[0, 0], [0, 0]]), ('', [[1, 0], [0, 0]]),
('', [[0, 0], [0, 0]]), ('', [[0, 0], [0, 0]]),
('', [[0, 0], [0, 0]])],
dtype=[('f0', '|S3'), ('f1', '<u2', (2, 2))])
我想你应该稍微改变一下。尝试:
x['f1'][1] = np.array([[1,1],[1,1]])
其结果是:
In [43]: x = np.zeros(5,dtype=new_type)
In [44]: x['f1'][1] = np.array([[1,1],[1,1]])
In [45]: x
Out[45]:
array([('', [[0, 0], [0, 0]]), ('', [[1, 1], [1, 1]]),
('', [[0, 0], [0, 0]]), ('', [[0, 0], [0, 0]]),
('', [[0, 0], [0, 0]])],
dtype=[('f0', '|S3'), ('f1', '<u2', (2, 2))])
我必须多想一想,才能弄清楚到底发生了什么。10个问题-0个被接受的答案。只是说…谢谢你的回答,我不会独自去想,是的,就像你说的,这似乎是一个奇怪的行为。@JustInTime-那么请接受这个答案(以及其他问题中的答案)。我刚刚遇到这个问题,也发现了这个解决方法。基本的问题似乎是这样做一种方式会产生一个副本,另一种方式会产生一个视图。不过,我不清楚除了尝试之外,你应该如何知道。我在这里找到了更多信息:
In [43]: x = np.zeros(5,dtype=new_type)
In [44]: x['f1'][1] = np.array([[1,1],[1,1]])
In [45]: x
Out[45]:
array([('', [[0, 0], [0, 0]]), ('', [[1, 1], [1, 1]]),
('', [[0, 0], [0, 0]]), ('', [[0, 0], [0, 0]]),
('', [[0, 0], [0, 0]])],
dtype=[('f0', '|S3'), ('f1', '<u2', (2, 2))])
In [51]: x['f1'][1]
Out[51]:
array([[1, 1],
[1, 1]], dtype=uint16)
In [52]: x[1]['f1']
Out[52]:
array([[1, 1],
[1, 1]], dtype=uint16)
In [53]: x[1]['f1'] = 2
In [54]: x
Out[54]:
array([('', [[0, 0], [0, 0]]), ('', [[2, 1], [1, 1]]),
('', [[0, 0], [0, 0]]), ('', [[0, 0], [0, 0]]),
('', [[0, 0], [0, 0]])],
dtype=[('f0', '|S3'), ('f1', '<u2', (2, 2))])
In [55]: x['f1'][1] = 3
In [56]: x
Out[56]:
array([('', [[0, 0], [0, 0]]), ('', [[3, 3], [3, 3]]),
('', [[0, 0], [0, 0]]), ('', [[0, 0], [0, 0]]),
('', [[0, 0], [0, 0]])],
dtype=[('f0', '|S3'), ('f1', '<u2', (2, 2))])