我有以下代码:
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函数来实现它?
答案 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列。在谈论数组和/或矩阵时,这是一种广泛传播的做法。