首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在NumPy中创建一个空数组/矩阵?

如何在NumPy中创建一个空数组/矩阵?
EN

Stack Overflow用户
提问于 2009-02-20 09:58:12
回答 11查看 1.2M关注 0票数 397

我不知道如何像通常使用列表那样使用数组或矩阵。我想创建一个空数组(或矩阵),然后一次向其中添加一列(或一行)。

目前,我能找到的唯一方法是:

mat = None
for col in columns:
    if mat is None:
        mat = col
    else:
        mat = hstack((mat, col))

然而,如果它是一个列表,我会这样做:

list = []
for item in data:
    list.append(item)

有没有一种方法可以将这种符号用于NumPy数组或矩阵?

EN

回答 11

Stack Overflow用户

回答已采纳

发布于 2009-02-20 10:36:46

你有一个错误的心理模型来有效地使用NumPy。NumPy数组存储在连续的内存块中。如果要向现有数组中添加行或列,则需要将整个数组复制到新的内存块中,从而为要存储的新元素创建间隙。如果为了构建数组而重复执行,这是非常低效的。

在添加行的情况下,最好的选择是创建一个与数据集最终大小一样大的数组,然后逐行为其分配数据:

>>> import numpy
>>> a = numpy.zeros(shape=(5,2))
>>> a
array([[ 0.,  0.],
   [ 0.,  0.],
   [ 0.,  0.],
   [ 0.,  0.],
   [ 0.,  0.]])
>>> a[0] = [1,2]
>>> a[1] = [2,3]
>>> a
array([[ 1.,  2.],
   [ 2.,  3.],
   [ 0.,  0.],
   [ 0.,  0.],
   [ 0.,  0.]])
票数 532
EN

Stack Overflow用户

发布于 2009-02-20 10:44:20

NumPy数组是一种与列表非常不同的数据结构,它被设计为以不同的方式使用。您对hstack的使用可能非常低效...每次调用它时,现有数组中的所有数据都会复制到一个新数组中。( append函数也会有同样的问题。)如果您希望一次构建一列矩阵,最好将其保存在列表中,直到完成,然后才将其转换为数组。

例如:

mylist = []
for item in data:
    mylist.append(item)
mat = numpy.array(mylist)

只要每个item具有相同数量的元素,item可以是列表、数组或任何可迭代的。

在这种特殊情况下(data是一些保存矩阵列的可迭代对象),您可以简单地使用

mat = numpy.array(data)

(还要注意,使用list作为变量名可能不是一种好的做法,因为它用该名称屏蔽了内置类型,这可能会导致错误。)

编辑:

如果出于某种原因,您确实想创建一个空数组,您可以只使用numpy.array([]),但这很少有用!

票数 123
EN

Stack Overflow用户

发布于 2014-04-10 12:34:59

为了在NumPy中创建一个空的多维数组(例如,一个2D数组m*n来存储您的矩阵),如果你不知道你将追加多少行,也不关心Stephen Simmons提到的计算成本(即在每次追加时重新构建数组),你可以将你想要追加的维数压缩到0:X = np.empty(shape=[0, n])

例如,您可以使用这种方式(这里是m = 5,我们假设在创建空矩阵时不知道它,以及n = 2):

import numpy as np

n = 2
X = np.empty(shape=[0, n])

for i in range(5):
    for j  in range(2):
        X = np.append(X, [[i, j]], axis=0)

print X

这将为您提供:

[[ 0.  0.]
 [ 0.  1.]
 [ 1.  0.]
 [ 1.  1.]
 [ 2.  0.]
 [ 2.  1.]
 [ 3.  0.]
 [ 3.  1.]
 [ 4.  0.]
 [ 4.  1.]]
票数 71
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/568962

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档