python - 操作 numpy 数组(连接内部子数组)
问题描述
我有一个操作 numpy 数组的问题。比如说,给定一个数组形式的 3-dnp.array([[[1,2],[3,4]], [[5,6],[7,8]]])
数组(2,2,2)
。我想将它操纵成一个(2,4)
数组,这样a = np.array([[1,2,5,6],[3,4,7,8]])
. 我想知道是否有任何内置的 numpy 方法,特别是处理这样的问题并且可以很容易地概括。
编辑:
谢谢大家的回答。他们都摇滚!我想我应该澄清我在原始帖子中“容易概括”的意思。假设给定一个(6,3,2,3)
数组(这是我面临的实际挑战)
a = array([[[[ 10, 20, 30],
[ 40, 40, 20]],
[[ 22, 44, 66],
[ 88, 88, 44]],
[[ 33, 66, 99],
[132, 132, 66]]],
[[[ 22, 44, 66],
[ 88, 88, 44]],
[[ 54, 108, 162],
[216, 216, 108]],
[[ 23, 46, 69],
[ 92, 92, 46]]],
[[[ 14, 28, 42],
[ 56, 56, 28]],
[[ 25, 50, 75],
[100, 100, 50]],
[[ 33, 66, 99],
[132, 132, 66]]],
[[[ 20, 40, 60],
[ 80, 80, 40]],
[[ 44, 88, 132],
[176, 176, 88]],
[[ 66, 132, 198],
[264, 264, 132]]],
[[[ 44, 88, 132],
[176, 176, 88]],
[[108, 216, 324],
[432, 432, 216]],
[[ 46, 92, 138],
[184, 184, 92]]],
[[[ 28, 56, 84],
[112, 112, 56]],
[[ 50, 100, 150],
[200, 200, 100]],
[[ 66, 132, 198],
[264, 264, 132]]]])
我想把它按摩成一个(3,3,2,2,3)
数组,这样a[0,:,:,:,:]
a[0,0,0,:,:] = np.array([[10,20,30],[40,40,20]]);
a[0,1,0,:,:] = np.array([[22,44,66],[88,88,44]]);
a[0,2,0,:,:] = np.array([[33,66,99],[132,132,66]]);
a[0,0,1,:,:] = np.array([[20,40,60],[80,80,40]]);
a[0,1,1,:,:] = np.array([[44,88,132],[176,176,88]]);
a[0,2,1,:,:] = np.array([[66,132,198],[264,264,132]]).
简而言之,最后 3 个最大的块应该与前 3 个最大的块“合并”以形成 3(3,2)
个块。其余 2 个块,即 ( a[1,:,:,:,:]
, a[2,:,:,:,:]
) 遵循相同的模式。
解决方案
您的主题行回答了您的问题:
In [813]: a
Out[813]:
array([[[1, 2],
[3, 4]],
[[5, 6],
[7, 8]]])
In [818]: np.concatenate(a, axis=1) # aka np.hstack
Out[818]:
array([[1, 2, 5, 6],
[3, 4, 7, 8]])
这将数组视为 2 (2,2) 个子数组。
另一个连接选项:
In [819]: np.concatenate(a, axis=0)
Out[819]:
array([[1, 2],
[3, 4],
[5, 6],
[7, 8]])
我认为转置后跟 reshape 更好,更容易概括。但它需要一些关于如何存储数组的知识,以及维度的含义和转置它们的方式。
plainreshape
不起作用的原因是您想重新排序数组的元素。
如文档reshape
所述,有效地分解数组,然后应用新形状:
In [823]: a.ravel()
Out[823]: array([1, 2, 3, 4, 5, 6, 7, 8])
但是你的新数组有不同的顺序:
In [824]: np.concatenate(a, axis=1).ravel()
Out[824]: array([1, 2, 5, 6, 3, 4, 7, 8])
推荐阅读
- c# - 实体框架强制 id[key] 插入
- sockets - 关于 SSL_connect 和 HTTPS 的查询
- r - 创建一个新列以识别两列是否相同但在第三列中具有不同的值
- reactjs - .htaccess 如何使用参数重定向到 index.html 但参数值与文件夹名称相同
- python - 如何在嵌套列表中搜索列表的编号并在其他嵌套列表中获取其索引?
- php - 如何在php中解码?
- javascript - 从 for 循环中水平而不是垂直打印数字
- javascript - 使用 jquery 发送文件并在 PHP 中接收(无插件)
- python-3.x - Panda returns 50x1 matrix instead of 50x7? (read_csv gone wrong)
- flutter - 将 API 文本数据传递给其他 Page Flutter