如何给数组增加一个维度,并用一组相同的数据填充新的维度

问题描述 投票:0回答:2

我有两个一维数组。我需要用第二个数组 (b) 中的所有行扩展第一个数组 (a),以创建一个新数组,该数组是合并两个数组的一维数组。

下面的例子更清楚:

a = np.array(['x', 'y'])
b = np.array(['a', 'b', 'c'])
# how to handle the above 1D-arrays to create the below array (c)?
c = np.array(['xa', 'xb', 'xc', 'ya', 'yb', 'yc'])
print(c)

新数组 c 看起来像:

['xa' 'xb' 'xc' 'ya' 'yb' 'yc']

当然,我可以用循环来做,但我正在寻找更智能的代码。 谢谢

python arrays numpy expand dimension
2个回答
0
投票

您可以使用 numpy 广播:

>>> np.char.add(a[:, None], b).ravel()
array(['xa', 'xb', 'xc', 'ya', 'yb', 'yc'], dtype='<U2')

0
投票

您可以使用 numpy 中的广播来实现此目的。这是一个实现您想要的结果的示例代码:

import numpy as np

a = np.array(['x', 'y'])
b = np.array(['a', 'b', 'c'])

a = a[:, np.newaxis]  # add a new axis to a
b = b[np.newaxis, :]  # add a new axis to b
c = np.char.add(a, b)  # concatenate a and b element-wise using np.char.add

c = c.flatten()  # flatten the resulting array into a 1D array

print(c)  # output: ['xa' 'xb' 'xc' 'ya' 'yb' 'yc']

在上面的代码中,您首先使用 np.newaxis 添加一个新轴到数组 a。这会将一维数组 a 转换为形状为 (2,1) 的二维数组。类似地,您向数组 b 添加一个新轴,这将生成一个形状为 (1,3) 的二维数组。

接下来,您使用 np.char.add 按元素连接两个数组。这会产生一个形状为 (2,3) 的二维数组。最后,使用 flatten() 方法将结果数组展平为一维数组。

© www.soinside.com 2019 - 2024. All rights reserved.