在NumPy中创建任何形状的图层

时间:2017-08-18 07:28:56

标签: python numpy matplotlib

我创建了一个这样的分层模型:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt    

a = np.full((9,10),1)
a[:5,] = 1
a[5:10,] = 2
print(a)
plt.imshow(a)

>>> Output:
[[1 1 1 1 1 1 1 1 1 1]
 [1 1 1 1 1 1 1 1 1 1]
 [1 1 1 1 1 1 1 1 1 1]
 [1 1 1 1 1 1 1 1 1 1]
 [1 1 1 1 1 1 1 1 1 1]
 [2 2 2 2 2 2 2 2 2 2]
 [2 2 2 2 2 2 2 2 2 2]
 [2 2 2 2 2 2 2 2 2 2]
 [2 2 2 2 2 2 2 2 2 2]]

plt.imshow()的结果显示为here

让我们考虑一下我有两个向量:

x = np.linspace(0,10,10)
z = np.random.uniform(0, 9, size=(1,9)).round(0)

其中x是一行,z是一列(如果我们保持简单,则为坐标)。

如何以某种方式更改此numpy数组,我将value=10分配给对应的x和z对(x [i],z [i])= 1?所以最后我可以得到类似this的内容。

1 个答案:

答案 0 :(得分:1)

以下是如何使用numpy索引iterables数组的示例:

import numpy as np
import matplotlib.pyplot as plt    

a = np.full((10,10),1)

x = np.arange(10)
z = np.random.randint(0, 10, size=(1,10))

a[x,z] = 2

plt.imshow(a)
plt.show()

请注意我如何使用astype(int)代替round编辑:从一开始就使用randint更好 - 感谢kazemakase for the评论)以及我如何调整a的范围。我还将linspace替换为arange,因为后者可以保证生成整数。

结果如下所示:

result of code