gpt4 book ai didi

python - 排列一个 numpy 数组以表示具有 2d 颜色图的物理排列

转载 作者:太空宇宙 更新时间:2023-11-04 05:13:12 25 4
gpt4 key购买 nike

我正在尝试绘制代表一组物理像素的 2d numpy 数组。然而,像素本身的排列方式非常复杂,我在排列阵列时遇到了麻烦,因此颜色图将代表物理设置。这是我当前数组的布局,下面是它需要组织成的布局图片(红色数字指的是下面数组的第一维。左下象限指的是第二维。)我我打算使用 pcolor,但如果有任何更适合这个问题的东西,我当然愿意接受其他选择。对此,我将不胜感激。

[[  575.40625    984.40625    560.234375   936.0625     733.84375
725.9375 469.234375 828.046875 210.421875 522.4375 713.375
466.484375 679.8125 242.296875 645.328125 666.265625]
[ 976.390625 668.46875 513.328125 769.359375 1343.65625
1068.3125 1206.21875 1447.484375 571.359375 420.71875
246.03125 333.15625 626.921875 615.03125 867.03125
1051.34375 ]
[ 498.1875 1176.453125 670.609375 597.578125 765.078125
713.8125 825.84375 760.171875 667.015625 755.40625
1003.71875 687.921875 448.921875 574.90625 598.859375
487.09375 ]
[ 564.203125 485.140625 652.625 740.875 465.875 1152.03125
623.15625 949.28125 722.515625 397.046875 529.03125 487.
427.109375 424. 495.734375 510.453125]]

Physical representation. The red numbers refer to the first dimension of the array above. Bottom left quadrant refers to the second dimension.

最佳答案

如果将 8x8 网格视为二维 numpy 数组,则将一维数据中给定索引对应的行计算为索引的位 1、3 和 5 的二进制值。类似地,该列是使用索引的位 0、2 和 4 计算的。这是一个将索引转换为行和列的函数:

def row_col_coords(index):
# Convert bits 1, 3 and 5 to row
row = 4*((index & 0b100000) > 0) + 2*((index & 0b1000) > 0) + 1*((index & 0b10) > 0)
# Convert bits 0, 2 and 4 to col
col = 4*((index & 0b10000) > 0) + 2*((index & 0b100) > 0) + 1*((index & 0b1) > 0)
return (row, col)

例如,

In [114]: row_col_coords(45)
Out[114]: (6, 3)

即对于索引 45,row(即 y)为 6,col 为 3。

计算是矢量化的,因此该函数实际上处理一个索引数组。例如,

In [116]: row_col_coords(np.array([45, 46, 47, 48]))
Out[116]: (array([6, 7, 7, 4]), array([3, 2, 3, 4]))

这是一个长度为 64 的示例一维数据数组。它只是 [100, 101, 102, ..., 163] 所以我们很容易看出数组是正确的。

In [116]: data = 100 + np.arange(64.)

要形成 8x8 数组,首先创建对应于数据索引 [0, 1, 2, ..., 63] 的行和列索引:

In [117]: row, col = row_col_coords(np.arange(64))

现在创建一个 8x8 数组并用 data 填充它,使用 rowcol 获得所需的顺序:

In [118]: a = np.empty((8, 8))

In [119]: a[row, col] = data

In [120]: a
Out[120]:
array([[ 100., 101., 104., 105., 116., 117., 120., 121.],
[ 102., 103., 106., 107., 118., 119., 122., 123.],
[ 108., 109., 112., 113., 124., 125., 128., 129.],
[ 110., 111., 114., 115., 126., 127., 130., 131.],
[ 132., 133., 136., 137., 148., 149., 152., 153.],
[ 134., 135., 138., 139., 150., 151., 154., 155.],
[ 140., 141., 144., 145., 156., 157., 160., 161.],
[ 142., 143., 146., 147., 158., 159., 162., 163.]])

行颠倒了!这是因为 numpy 数组首先显示第 0 行,然后是第 1 行,以此类推。要以“正确”顺序查看数据,只需反转数组:

In [121]: a[::-1]
Out[121]:
array([[ 142., 143., 146., 147., 158., 159., 162., 163.],
[ 140., 141., 144., 145., 156., 157., 160., 161.],
[ 134., 135., 138., 139., 150., 151., 154., 155.],
[ 132., 133., 136., 137., 148., 149., 152., 153.],
[ 110., 111., 114., 115., 126., 127., 130., 131.],
[ 108., 109., 112., 113., 124., 125., 128., 129.],
[ 102., 103., 106., 107., 118., 119., 122., 123.],
[ 100., 101., 104., 105., 116., 117., 120., 121.]])

关于python - 排列一个 numpy 数组以表示具有 2d 颜色图的物理排列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42473535/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com