在多维numpy数组中填充数据

时间:2016-05-12 10:03:58

标签: python arrays numpy

我对python真的不熟悉,很抱歉,如果我的问题太简单了。假设我有一个2d <input type="button" class="btn btn-success btn-sm pull-left" value="Update" onclick="EventChanger(this)" id="btnUS" /> <script type="text/javascript"> var elem = $("#btnUS"); if (elem.val() == "Update") { elem.val("Save"); $('#txtContactName').prop('disabled', true); $('#txtIdentityNumber').prop('disabled', true); $('#txtSuburb').prop('disabled', true); $('#txtCellNumber').prop('disabled', false); } else if(elem.val() == "Save") { elem.val("Update"); $('#txtContactName').prop('disabled', false); $('#txtIdentityNumber').prop('disabled', false); $('#txtSuburb').prop('disabled', false); $('#txtCellNumber').prop('disabled', false); } </script> 数组

numpy

假设我有1d数据数组size = width, height array = np.zeros(size, dtype=np.uint8) ,我想将数据放入data_array变量

array

但是,似乎不可能对多维颠簸阵列使用追加

2 个答案:

答案 0 :(得分:1)

您可以使用

重塑1D阵列
array=data_array.reshape(width, height)

如果总大小相同

答案 1 :(得分:0)

如果你真的需要按元素构建一个二维数组元素,这是基本的方法:

size=3,4
A=np.zeros(size,int)
for i in range(size[0]):
   for j in range(size[1]):
      A[i,j] = i*4 + j   # assign elements, don't append

生产

数组([[0,1,2,3],        [4,5,6,7],        [8,9,10,11]])

但是使用reshape我可以做同样的事情,并且更快

In [190]: x=np.arange(12)

In [191]: x
Out[191]: array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11])

In [192]: x.reshape(3,4)   # may want to add a .copy()
Out[192]: 
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])

构建数组的另一种常见方法是附加到列表,并在循环结束时将其转换为数组。

In [193]: alist=[]    
In [195]: for i in range(3):
   .....:     ll = []
   .....:     for j in range(4):
   .....:         ll.append(i*4+j)
   .....:     alist.append(ll)
   .....:     

In [196]: alist
Out[196]: [[0, 1, 2, 3], [4, 5, 6, 7], [8, 9, 10, 11]]

In [197]: np.array(alist)
Out[197]: 
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])

或者以紧凑列表理解形式:

np.array([[i*4+j for j in range(4)] for i in range(3)])

如果我可以将j迭代作为数组执行

,这可能会更快
for i in range(3):
    alist.append(i*4+np.arange(4))

如果我们以这种方式做这两个维度,那就更好了

np.arange(3)[:,None]*4 + np.arange(4)

这使用'广播'来创建2个阵列的外部产品

In [209]: np.arange(3)*4, np.arange(4)
Out[209]: (array([0, 4, 8]), array([0, 1, 2, 3]))

填充数组的另一种方法是分配给'flat'版本:

A.flat[:]=np.arange(1,13)