【问题标题】:Appending a tuple to a np array returns a list of scalars instead of tuples将元组附加到 np 数组返回标量列表而不是元组
【发布时间】:2017-10-17 20:27:14
【问题描述】:

我正在尝试创建一个 numpy 元组数组,但生成的 np 数组包含标量而不是元组。

我有:

log_df = pd.read_csv(file_name)
nod_intervals = np.array([])
for index, row in log_df.iterrows():
    if row['gesture'] == 'Nod' and row['label'] == 'y':
        nod_intervals = np.append(nod_intervals, (row['start'], row['end']))

 print nod_intervals

结果是:

[  700072.   711071.  1123467.  1133810.  1799492.  1810464.  3861590. 3871927.  4124862.  4135798.  5097266.  5107561.  5392353.  5402949. 5528955.  5539925.  6056021.  6066913.  6730803.  6741807.]

如您所见,这些是标量,而不是元组。

我做错了什么?

【问题讨论】:

  • 向我们展示一些示例数据

标签: python arrays pandas numpy tuples


【解决方案1】:

如果您不打算将数组用于任何有用的操作(矢量化操作),只需使用列表即可。

nod_intervals = []
for index, row in log_df.iterrows():
    if row['gesture'] == 'Nod' and row['label'] == 'y':
        nod_intervals.append((row['start'], row['end']))

可能更快(不是保证):

m = log_df['gesture'].eq('Nod') & log_df['label'].eq('y')
nod_intervals = log_df[m][['start', 'end']].apply(tuple, 1).values

【讨论】:

  • 对于追加,我们不需要把它分配回来吧?nod_intervals.append((row['start'], row['end']))够了吧?
  • 我会有很多数据所以我想要numpy的速度
  • @dirtysocks45 相信我,np.appendlist.append 慢得多。
  • 哦,我没有意识到这一点。谢谢。
  • 第二个答案是哪个用户?
【解决方案2】:

这是正确的行为。 Numpy.append 将展平您的数据并添加它。看看这里的例子:https://docs.scipy.org/doc/numpy-1.13.0/reference/generated/numpy.append.html

嵌套数组并不是一个好主意。也许你想要一个多维数组。无论哪种方式,使用append 可能是一个 Python 列表效率极低,最好分配一个空数组然后填充它。

【讨论】:

  • 那么我如何获得元组列表呢?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-17
  • 2013-12-23
  • 2018-05-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多