【问题标题】:expand array and append row name展开数组并追加行名
【发布时间】:2020-08-24 23:29:33
【问题描述】:

我有一个包含以下行的输入文件 foo.txt

A 1 2 3
B 4 5 6
C 7 8 9

我写了以下几行

import numpy as np
import pandas as pd

file="foo.txt"

source_array=pd.read_csv(file, sep=" ", header=None)

name_array=source_array.iloc[:,0].to_numpy()
number_array=source_array.iloc[:,1:4].to_numpy()

r1=np.array([[1,0,0],[0,1,0],[0,0,1]])
r2=np.array([[0.5,-0.30902,-0.80902],[0.30902,-0.80902,0.5],[-0.80902,-0.5,-0.30902]])
r3=np.array([[0.5,0.30902,-0.80902],[-0.30902,-0.80902,-0.5],[-0.80902,0.5,-0.30902]])
mult_array=np.array([r1,r2,r3])

out_array=np.empty((0,3))
for i in range(number_array.shape[0]):
    lad=number_array[i,0:3]
    lad=lad.reshape(1,3)
    print(lad)
    for j in range(mult_array.shape[0]):
        operated_array=np.dot(lad,mult_array[j])
        out_array=np.append(out_array,operated_array,axis=0)
        #print(operated_array)
    np.savetxt('foo2.txt',out_array, fmt='%.2f')

执行do乘法后,我得到以下输出

1.00 2.00 3.00
-1.31 -3.43 -0.74
-2.55 0.19 -2.74
4.00 5.00 6.00
-1.31 -8.28 -2.59
-4.40 0.19 -7.59
7.00 8.00 9.00
-1.31 -13.14 -4.44
-6.25 0.19 -12.44

但是 foo2.txt 中的预期输出是

A 1.00 2.00 3.00
A -1.31 -3.43 -0.74
A -2.55 0.19 -2.74
B 4.00 5.00 6.00
B -1.31 -8.28 -2.59
B -4.40 0.19 -7.59
C 7.00 8.00 9.00
C -1.31 -13.14 -4.44
C -6.25 0.19 -12.44

如何在执行点乘时多次复制行名?

为清楚起见,输入 print(df) 输出为

df
   0  1  2  3
0  A  1  2  3
1  B  4  5  6
2  C  7  8  9

【问题讨论】:

    标签: python arrays pandas numpy


    【解决方案1】:

    我们不需要for循环,也可以借助explode

    df['new']=np.dot(df,mult_array).tolist()
    s=df.new.explode()
    output=pd.DataFrame(s.tolist(),index=s.index).round(2)
    Out[30]: 
          0      1      2
    A  1.00   2.00   3.00
    A -1.31  -3.43  -0.74
    A -2.55   0.19  -2.74
    B  4.00   5.00   6.00
    B -1.31  -8.28  -2.59
    B -4.40   0.19  -7.59
    C  7.00   8.00   9.00
    C -1.31 -13.14  -4.44
    C -6.25   0.19 -12.44
    

    数据输入

    df
       0  1  2
    A  1  2  3
    B  4  5  6
    C  7  8  9
    

    【讨论】:

    • 你的意思是第二个for循环吗?
    • @PranavShah 是的......不,我们根本不需要 for 循环......
    • 我收到此错误 df['new']=np.dot(df,mult_array).tolist() 文件“<__array_function__ internals>”,第 6 行,点 ValueError:shapes (3 ,4) 和 (3,3,3) 未对齐:4 (dim 1) != 3 (dim 1)
    • @PranavShah 检查上面的输入 df ,确保输入相同
    • 我的输入不同...` df 0 1 2 3 0 A 1 2 3 1 B 4 5 6 2 C 7 8 9 `
    猜你喜欢
    • 2013-04-13
    • 2019-01-11
    • 2012-07-05
    • 2019-12-07
    • 2015-05-14
    • 1970-01-01
    • 2012-12-01
    • 2013-06-24
    • 1970-01-01
    相关资源
    最近更新 更多