在给定X和Y索引的numpy数组中插入元素

时间:2017-06-07 21:49:33

标签: python arrays numpy

我有以下代码:

import numpy as np

b = np.full([20, 20], 0)

x = [3, 6, 3, 6]
y = [18, 18, 19, 19]

print(b)
for _x, _y in zip(y, x):
    b[_x][_y] = 1
    pass

print('\n')

print(b)

但是,我并不了解其中的一些内容,例如x和y坐标。他们为什么要翻身? 有没有更简洁的方法来使用内置的numpy函数来实现它?

2 个答案:

答案 0 :(得分:0)

for _x, _y in zip(y, x):

按照您打算使用它们的顺序进行拉链,拉链式

for _x, _y in zip(x,y):

然后

print(*b, sep='\n')
[ 0.  0.  0. ...,  0.  0.  0.]
[ 0.  0.  0. ...,  0.  0.  0.]
[ 0.  0.  0. ...,  0.  0.  0.]
[ 0.  0.  0. ...,  0.  1.  1.]
[ 0.  0.  0. ...,  0.  0.  0.]
[ 0.  0.  0. ...,  0.  0.  0.]
[ 0.  0.  0. ...,  0.  1.  1.]
[ 0.  0.  0. ...,  0.  0.  0.]

答案 1 :(得分:0)

创建一个更小的数组(更容易显示)和一对索引(忘记x,y标签):

In [270]: arr = np.zeros((10,10), int)
In [271]: I = [3,6,3,6]
In [272]: J = [4,4,5,5]
In [273]: for i,j in zip(I,J):
     ...:     arr[i,j] = i+j     # note the [i,j] indexing
In [274]: arr
Out[274]: 
array([[ 0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
       [ 0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
       [ 0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
       [ 0,  0,  0,  0,  7,  8,  0,  0,  0,  0],  # row 3
       [ 0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
       [ 0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
       [ 0,  0,  0,  0, 10, 11,  0,  0,  0,  0],  # row 6
       [ 0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
       [ 0,  0,  0,  0,  0,  0,  0,  0,  0,  0],
       [ 0,  0,  0,  0,  0,  0,  0,  0,  0,  0]])
#                      col 4 5

我们可以直接使用I,J列表设置值;或者我们可以检索值:

In [275]: arr[I,J]
Out[275]: array([ 7, 10,  8, 11])

使用numpy 2d数组的约定,第一个索引显示为行,第二个索引显示为列。

np.meshgrid有一个索引参数,可以容纳不同的标签:

In [279]: np.meshgrid([3,6],[4,5],indexing='xy')
Out[279]: 
[array([[3, 6],
        [3, 6]]), 
 array([[4, 4],
        [5, 5]])]
In [280]: np.meshgrid([3,6],[4,5],indexing='ij')
Out[280]: 
[array([[3, 3],
        [6, 6]]), 
 array([[4, 5],
        [4, 5]])]

显示数组是一回事,将其绘制为散点图或图像是另一回事。

默认的imshow参数显示数组的方向相同,原点位于左上角。

plt.imshow(arr,origin='upper')

我真的应该给阵列提供不同的尺寸,例如

In [289]: arr = np.arange(12).reshape(3,4)
In [290]: arr
Out[290]: 
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])

(3,4)形状显示为3行,4列。在谈论数组和/或矩阵时,这是一种广泛传播的做法。