【发布时间】:2021-02-02 18:43:19
【问题描述】:
我有一个非常大的列表数组,我想将一个元素附加到每个数组。为了性能,我想避免使用循环。
以下语法无效。
a=np.array([[],[1],[0,1]])
[j.append(3) for j in a]
这个例子的预期结果是
np.array([[3],[1,3],[0,1,3])
但我得到了
[None, None, None]
有什么线索吗?
【问题讨论】:
-
真的
np.array在不同大小的列表上不会让你有太大的改进,如果有任何超过香草 python。 -
None是append的输出。但是如果你检查a,你会发现它已经动态变化了。 -
为什么
numpy.ndarray中有pythonlist对象?这真的没有意义。请注意,不要将列表理解用于副作用,[j.append(3) for j in a]会给您[None, None, None],因为j.append(r)将总是返回None,但请注意,@987654334 中的原始列表@应该被修改。但不要这样做,使用常规循环。更好的是,不要使用 numpy.ndarray 列表。 -
对象 dtype 数组上的迭代比列表上的迭代要慢一些。但两者都比迭代二维数组的行要快。
标签: python performance numpy memory