如何将 2D df 中的所有值分别与 1D df 中的所有值相乘?
How can you multiply all the values within a 2D df with all the values within a 1D df separately?
我是 numpy 的新手,目前正在从事一个建模项目,我必须根据两个不同的数据源执行一些计算。但是直到现在我还没有弄清楚如何将所有单独的值相互相乘:
我有两个数据框
一个二维数据框:
df1 = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
一个一维数据框:
df2 = np.array([1, 2, 3, 4, 5])
我想将第一个数据帧 (df1) 中的所有单个值分别与第二个数据帧中存储的所有值相乘,以创建形状为 5x3x3 的数据立方体/新 3D 数据帧:
df3 = np.array([[[1, 2, 3], [4, 5, 6], [7, 8, 9]], [[2, 4, 6], [8, 10, 12], [14, 16, 18]], ..... ])
我尝试了不同的方法,但每次都无法获得看起来像 df3 的东西。
x = np.array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
y = np.array([1, 2, 3, 4, 5])
z = y
for i in range(len(z)):
z.iloc[i] = x
for i in range(0, 5):
for j in range(0, 3):
for k in range(0, 3):
z.iloc[i, j, k] = y.iloc[i] * x.iloc[j, k]
print(z)
有人可以帮我提供一些示例代码吗?谢谢!
试试这个:
df1 = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
df2 = np.array([1, 2, 3, 4, 5])
df3 = df1 * df2[:, None, None]
输出:
>>> df3
array([[[ 1, 2, 3],
[ 4, 5, 6],
[ 7, 8, 9]],
[[ 2, 4, 6],
[ 8, 10, 12],
[14, 16, 18]],
[[ 3, 6, 9],
[12, 15, 18],
[21, 24, 27]],
[[ 4, 8, 12],
[16, 20, 24],
[28, 32, 36]],
[[ 5, 10, 15],
[20, 25, 30],
[35, 40, 45]]])
我是 numpy 的新手,目前正在从事一个建模项目,我必须根据两个不同的数据源执行一些计算。但是直到现在我还没有弄清楚如何将所有单独的值相互相乘:
我有两个数据框
一个二维数据框:
df1 = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
一个一维数据框:
df2 = np.array([1, 2, 3, 4, 5])
我想将第一个数据帧 (df1) 中的所有单个值分别与第二个数据帧中存储的所有值相乘,以创建形状为 5x3x3 的数据立方体/新 3D 数据帧:
df3 = np.array([[[1, 2, 3], [4, 5, 6], [7, 8, 9]], [[2, 4, 6], [8, 10, 12], [14, 16, 18]], ..... ])
我尝试了不同的方法,但每次都无法获得看起来像 df3 的东西。
x = np.array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
y = np.array([1, 2, 3, 4, 5])
z = y
for i in range(len(z)):
z.iloc[i] = x
for i in range(0, 5):
for j in range(0, 3):
for k in range(0, 3):
z.iloc[i, j, k] = y.iloc[i] * x.iloc[j, k]
print(z)
有人可以帮我提供一些示例代码吗?谢谢!
试试这个:
df1 = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
df2 = np.array([1, 2, 3, 4, 5])
df3 = df1 * df2[:, None, None]
输出:
>>> df3
array([[[ 1, 2, 3],
[ 4, 5, 6],
[ 7, 8, 9]],
[[ 2, 4, 6],
[ 8, 10, 12],
[14, 16, 18]],
[[ 3, 6, 9],
[12, 15, 18],
[21, 24, 27]],
[[ 4, 8, 12],
[16, 20, 24],
[28, 32, 36]],
[[ 5, 10, 15],
[20, 25, 30],
[35, 40, 45]]])