我正在尝试将一个一维数组连接成一个二维数组。我想避免做循环,因为如果我的数组长度大于1000,它就会占用大量的计算机资源。
我已经尝试了vstack、stack和concatenate,但都没有成功。
import numpy as np
array_a = np.array([1,2,3])
array_b = np.array([[10, 11, 12], [20, 21, 22], [30, 31, 32]])
预期输出应为
array([[1, 10, 11, 12], [2, 20, 21, 22], [3, 30, 31, 32]])
非常感谢您的帮助!
发布于 2019-10-09 05:16:48
Mykola展示了这样做的正确方法,但我怀疑您需要一点帮助来理解原因。你试了几件事都没告诉我们出了什么问题。
In [241]: array_a = np.array([1,2,3])
...: array_b = np.array([[10, 11, 12], [20, 21, 22], [30, 31, 32]])
vstack
运行:
In [242]: np.vstack((array_a, array_b))
Out[242]:
array([[ 1, 2, 3],
[10, 11, 12],
[20, 21, 22],
[30, 31, 32]])
但结果是垂直连接,按行,而不是按列。vstack
中的v
应该提醒我们这一点。
stack
尝试在新的轴上联接数组,并要求所有输入数组都具有匹配的形状:
In [243]: np.stack((array_a, array_b))
...
ValueError: all input arrays must have the same shape
我怀疑你在没有真正阅读文档的情况下,随意地尝试了一下。
这两种方法都使用concatenate
,这是基本的拼接器。但它对尺寸很挑剔:
In [244]: np.concatenate((array_a, array_b))
...
ValueError: all the input arrays must have same number of dimensions, but the array at index 0 has 1 dimension(s) and the array at index 1 has 2 dimension(s)
您清楚地意识到维度的数量不匹配。
你想做一个(3,4)数组。一个是(3,3),另一个需要是(3,1)。join轴需要为1
In [247]: np.concatenate((array_a[:,None], array_b), axis=1)
Out[247]:
array([[ 1, 10, 11, 12],
[ 2, 20, 21, 22],
[ 3, 30, 31, 32]])
如果我们做了一个(1,3)数组,并尝试在默认的0轴上连接,我们得到了与vstack
相同的东西。事实上,这就是vstack
所做的:
In [248]: np.concatenate((array_a[None,:], array_b))
Out[248]:
array([[ 1, 2, 3],
[10, 11, 12],
[20, 21, 22],
[30, 31, 32]])
另一个函数是:
In [249]: np.column_stack((array_a, array_b))
Out[249]:
array([[ 1, 10, 11, 12],
[ 2, 20, 21, 22],
[ 3, 30, 31, 32]])
这与247做同样的事情。
像vstack
和column_stack
这样的函数很方便,但从长远来看,最好理解如何使用concatenate
本身。
发布于 2019-10-09 04:26:36
你想要insert
import numpy as np
array_a = np.array([1, 2, 3])
array_b = np.array([[10, 11, 12], [20, 21, 22], [30, 31, 32]])
result = np.insert(array_b, 0, array_a, axis=1)
print(result)
输出
[[ 1 10 11 12]
[ 2 20 21 22]
[ 3 30 31 32]]
发布于 2019-10-09 05:00:09
您可以对第一个阵列执行reshape()
操作,然后对两个阵列执行concatenate()
操作:
np.concatenate([array_a.reshape(3, -1), array_b], axis=1)
https://stackoverflow.com/questions/58293610
复制相似问题