【问题标题】:How can I convert an ndarray to a matrix in scipy?如何将 ndarray 转换为 scipy 中的矩阵?
【发布时间】:2011-04-28 17:12:21
【问题描述】:

如何在 numpy 中将 ndarray 转换为矩阵?我正在尝试从 csv 导入数据并将其转换为矩阵。

from numpy import array, matrix, recfromcsv
my_vars = ['docid','coderid','answer1','answer2']
toy_data = matrix( array( recfromcsv('toy_data.csv', names=True)[my_vars] ) )
print toy_data
print toy_data.shape

但我明白了:

[[(1, 1, 3, 3) (1, 2, 4, 1) (1, 3, 7, 2) (2, 1, 3, 3) (2, 2, 4, 4)
  (2, 4, 3, 1) (3, 1, 3, 3) (3, 2, 4, 3) (3, 3, 3, 4) (4, 4, 5, 1)
  (4, 5, 6, 2) (4, 2, 4, 3) (5, 2, 5, 4) (5, 3, 3, 1) (5, 4, 7, 2)
  (6, 1, 3, 3) (6, 5, 4, 1) (6, 2, 5, 2)]]
(1, 18)

我需要做什么才能从这段代码中得到一个 4 x 18 的矩阵?这个问题一定有一个简单的答案,但我就是找不到。

【问题讨论】:

  • 你为什么不重新塑造它而不是使用矩阵?
  • Reshape 不会让我将 1x18 对象转换为 4x18 对象,对吗?
  • 您如何建议将 1x18 对象转换为 4x18 对象?其他行是从哪里来的?
  • 查看上面的输出:recfromcsv 将 4x18 csv 文件导入为 18 行 ndarray,每行包含一个 4 元组数据。我想将其转换为 4x18 矩阵。
  • 如果你有一个 18x4 ndarray,那么只需使用 .T 将其转置为 18x4 ndarray。

标签: python arrays matrix numpy


【解决方案1】:

如果最终目标是制作矩阵,则无需创建包含命名列的重新数组。您可以使用 np.loadtxt 将 csv 加载到 ndarray 中,然后使用 np.asmatrix 将其转换为矩阵:

import numpy as np
toy_data = np.asmatrix(np.loadtxt('toy_data.csv',delimiter=','skiprows=1))
print toy_data
print toy_data.shape

产量

[[ 1.  1.  3.  3.]
 [ 1.  2.  4.  1.]
 [ 1.  3.  7.  2.]
 [ 2.  1.  3.  3.]
 [ 2.  2.  4.  4.]
 [ 2.  4.  3.  1.]
 [ 3.  1.  3.  3.]
 [ 3.  2.  4.  3.]
 [ 3.  3.  3.  4.]
 [ 4.  4.  5.  1.]
 [ 4.  5.  6.  2.]
 [ 4.  2.  4.  3.]
 [ 5.  2.  5.  4.]
 [ 5.  3.  3.  1.]
 [ 5.  4.  7.  2.]
 [ 6.  1.  3.  3.]
 [ 6.  5.  4.  1.]
 [ 6.  2.  5.  2.]]
(18, 4)

注意:skirows 参数用于跳过 csv 中的标题。

【讨论】:

    【解决方案2】:

    您可以将所有值读入一个向量,然后对其进行整形。

    fo = open("toy_data.csv")
    
    def _ReadCSV(fileobj):
      for line in fileobj:
        for el in line.split(","):
          yield float(el)
    
    
    header = map(str.strip, fo.readline().split(","))
    a = numpy.fromiter(_ReadCSV(fo), numpy.float64)
    a.shape = (-1, len(header))
    

    但是对于更新的 numpy 可能有更直接的方法。

    【讨论】:

      猜你喜欢
      • 2014-12-21
      • 2017-03-10
      • 1970-01-01
      • 1970-01-01
      • 2020-08-14
      • 2013-11-13
      • 1970-01-01
      • 2016-11-19
      • 2019-08-17
      相关资源
      最近更新 更多