【问题标题】:Slicing Cross-section of 2D NumPy array切片二维 NumPy 数组的横截面
【发布时间】:2016-09-25 22:14:58
【问题描述】:

我正在寻找打印 numpy 数组的横截面。我希望从第 5 个索引列中提取前 15 行和唯一的数据。

import csv as csv
import numpy as np 

csv_file_object = open('train.csv', 'rU')
header = next(csv_file_object)
data = []

for row in csv_file_object:
    data.append(row)

data = np.array(data)

print(data[0:15,5])

当我运行上述代码时,我收到以下错误:IndexError: too many indices for array.

在不添加列过滤器的情况下运行代码可以按预期工作。 csv 文件是一个 12x892 (x,y) 数据集。

【问题讨论】:

  • 检查你的数组形状,你确定你没有 12 列和 892 行吗?
  • 是的,它是 12 列和 892 行。 print(data[0:15]) #打印所有列和行 1-15 print(data[0:15,5]) #receive IndexError

标签: python arrays numpy indices


【解决方案1】:

csv_file_object 是一个文件对象,它包含您的 csv 文件的所有行而不进行拆分。您必须使用csv 模块才能正确读取它们:

with open('train.csv', 'rU') as csv_file_object:
    reader = csv.DictReader(csv_file_object)
    data = np.array([row.values() for row in reader])

但既然你想将它们转换为一个 numpy 数组,你最好使用genfromtxt 函数:

data = np.genfromtxt('train.csv')

您可以传递 dtypedelimiternames(用于保留标头的布尔值)等参数。

【讨论】:

  • 我用你的方法导入,仍然收到相同的 IndexError。为什么当我包含列过滤器(索引 5)时,我收到错误,当它被遗漏时,它会按预期打印前 15 行
  • @jmh1092 也许你的数组没有 5 列。
  • data.shape 返回什么?
  • data.shape 返回:(891,) 我看到它将“数据”显示为一维数组。打开 csv 文件时是否需要包含 delimiter=','?
  • @jmh1092 试试看。 (如果你确定是分隔符)
【解决方案2】:

更新:我在打开文件之前没有调用 csv.reader()

import csv as csv
import numpy as np 

csv_file_object = csv.reader(open('train.csv', 'rU'))
header = next(csv_file_object)
data = []

for row in csv_file_object:
    data.append(row)

data = np.array(data)

print(data.shape)
print(data[0:15,5])

【讨论】:

    猜你喜欢
    • 2018-07-30
    • 1970-01-01
    • 2021-08-21
    • 2015-01-29
    • 2021-11-23
    • 2018-02-15
    • 2019-05-14
    • 1970-01-01
    相关资源
    最近更新 更多