Python 将字符串列添加到浮点矩阵NumPy
我正在寻找一种方法,将一列浮点值添加到字符串值矩阵中Python 将字符串列添加到浮点矩阵NumPy,python,string,numpy,matrix,floating-point,Python,String,Numpy,Matrix,Floating Point,我正在寻找一种方法,将一列浮点值添加到字符串值矩阵中 Mymatrix = [["a","b"], ["c","d"]] 我需要一个这样的矩阵= [["a","b",0.4], ["c","d",0.6]] 我建议改为使用数据帧: import pandas as pd df = pd.DataFrame([["a","b",0.4], ["c","d",0.6]]) print(df) 0 1 2 0 a b 0.4 1
Mymatrix =
[["a","b"],
["c","d"]]
我需要一个这样的矩阵=
[["a","b",0.4],
["c","d",0.6]]
我建议改为使用数据帧:
import pandas as pd
df = pd.DataFrame([["a","b",0.4],
["c","d",0.6]])
print(df)
0 1 2
0 a b 0.4
1 c d 0.6
您还可以指定列(系列
)名称:
你需要明白你为什么这么做。Numpy是高效的,因为数据在内存中对齐。因此,混合类型通常是性能差的根源。但在您的例子中,您可以保留对齐,因为所有字符串都具有相同的长度。由于类型不是同质的,因此可以使用:
您也可以使用pandas,但通常会降低一些性能。如前所述,您不能在数据阵列中混合数据类型,但可以在or中混合数据类型。它们的相似之处在于,您可以按照
dtype=
参数的定义混合数据类型(它定义了数据类型和字段名)。记录数组允许按属性而不是仅按索引访问结构化数组的字段。如果要在数组之间复制整个内容,则不需要对循环执行。请参见下面的示例(使用您的数据):
结果输出如下所示:
[('a', 'b', 0.4) ('c', 'd', 0.6)]
然后,使用格式化的字符串进行打印。
在我的示例中,如果您颠倒分配顺序,也可以从重新排列复制到重新排列。
注意:我发现在使用Recarray时可能会有严重的性能损失。请参阅此线程中的答案:
您不能在NumPy中使用它(除非您有一个对象的数组,这通常不是很有用)。考虑使用Python(嵌套)列表或其他高级结构,比如数据帧。多谢各位
raw=[["a","b",0.4],
["c","d",0.6]]
dt=dtype([('col0','U1'),('col1','U1'),('col2',float)])
aligned=ndarray(len(raw),dt)
for i in range (len(raw)):
for j in range (len(dt)):
aligned[i][j]=raw[i][j]
Mymatrix = np.array([["a","b"], ["c","d"]])
Mycol = np.array([0.4, 0.6])
dt=np.dtype([('col0','U1'),('col1','U1'),('col2',float)])
new_recarr = np.empty((2,), dtype=dt)
new_recarr['col0'] = Mymatrix[:,0]
new_recarr['col1'] = Mymatrix[:,1]
new_recarr['col2'] = Mycol[:]
print (new_recarr)
[('a', 'b', 0.4) ('c', 'd', 0.6)]