Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将字符串列添加到浮点矩阵NumPy_Python_String_Numpy_Matrix_Floating Point - Fatal编程技术网

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)]