矩阵(2x1)中的数字数组,不改变其形状

时间:2018-05-11 06:08:46

标签: python arrays numpy

我创建了一个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)

1 个答案:

答案 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 = ...为变量分配一个新数组;它不会修改现有的。