我创建了一个shape = [2,1]的数组,并为数组赋予了一维形状的数组[3,1]。出现的问题是数组形状从[2,1]更改为[2,1,3]。如何使编译器理解一维数组应被视为单个元素
k = [[1,2,3],[4,5,6]]
a = np.zeros(shape = [2,1],dtype = float)
a = np.array([[k [0]],[k [1]]])
a.shape
(2,1,3)
a = np.array([[np.asarray(k [0])],[np.asarray(k [1])]])
a.shape
(2,1,3)
答案 0 :(得分:0)
In [1]: k = [[1,2,3],[4,5,6]]
从k
:
In [2]: a = np.array([[k[0]],[k[1]]])
In [3]: a
Out[3]:
array([[[1, 2, 3]],
[[4, 5, 6]]])
In [4]: a.shape
Out[4]: (2, 1, 3)
如果我们脱掉一层[]:
In [7]: a = np.array([k[0],k[1]])
In [8]: a
Out[8]:
array([[1, 2, 3],
[4, 5, 6]])
In [9]: a.shape
Out[9]: (2, 3)
我们可以初始化一个对象dtype数组,并用k
:
In [10]: a =np.empty(2, object)
In [11]: a
Out[11]: array([None, None], dtype=object)
In [12]: a[:] = k
In [13]: a
Out[13]: array([list([1, 2, 3]), list([4, 5, 6])], dtype=object)
In [14]: a.shape
Out[14]: (2,)
此处a[:]=k
分配工作正常;有时我们会得到形状/广播错误,可能需要逐个元素地分配。
例如:
In [15]: a =np.empty((2,1), object)
In [16]: a[:] = k
...
ValueError: cannot copy sequence with size 3 to array axis with dimension 1
In [17]: a[:,0] = k # the 1d assignment as before
In [18]: a
Out[18]:
array([[list([1, 2, 3])],
[list([4, 5, 6])]], dtype=object)
注意,我们必须使用索引分配来更改现有数组的值。 a = ...
为变量分配一个新数组;它不会修改现有的。