如何向numpy数组添加元素

15

我希望在Numpy中递归地执行类似于Python列表中添加元素的操作,就像下面的代码一样。

matrix = open('workfile', 'w')
A = []
for row in matrix:
    A.append(row)

print A

我已经尝试了以下方法:

matrix = open('workfile', 'w')
A = np.array([])
for row in matrix:
    A = numpy.append(row)

print A

它没有返回想要的输出,就像列表中一样。

编辑这个示例代码:

mat = scipy.io.loadmat('file.mat')
var1 = mat['data1']
A = np.array([])
for row in var1:
    np.append(A, row)

print A

这只是我想做的最简单的情况,但在循环中还有更多的数据处理,我这样表述是为了让示例更清晰。


3
在我看来,这似乎更倾向于迭代而不是递归...另外...你是否考虑过只使用 np.loadtxt 从文件中加载数据? - Jon Clements
1
就此而言,你的所有问题都与递归无关。你只是在使用循环,这与递归不同。除此之外,在你的第二个示例中有很多荒谬之处。你试图将潜在任意长度的字符串放入Numpy数组中。 - Iguananaut
这只是一个例子,我知道如何将文件加载到numpy数组中,并且我知道这样做更好,问题是在需要迭代的情况下如何向numpy数组添加值,就像在for循环中一样。 - user3025898
补充一下我的看法。不要忘记,将某些内容附加到numpy数组中并不会就地更改它,而是会创建一个完整的副本。当您完成附加项目时,构建Python列表并将其转换为数组会更快。如果您有一些严格的内存限制,可以考虑使用“array”模块中的数组。它们是动态静态类型的数组。 - Eli Korvigo
如果var1来自于loadmat,它不是一个数组(或numpy矩阵),难道你不能使用向量操作将其转换为新的numpy数组吗?或者如果你必须迭代,可以使用A[i,:] = fn(var1[i,:])这种惯用法。 - hpaulj
显示剩余5条评论
1个回答

23
你需要将数组A传递给Numpy。
matrix = open('workfile', 'w')
A = np.array([])
for row in matrix:
    A = numpy.append(A, row)

print A

然而,直接从文件中加载可能是一个更好的解决方案。


请查看提供的示例代码,运行您的代码会返回一个空数组 []。 - user3025898
你确定你的输入文件被正确读取/具有适当的数据吗?for i in range(5): np.append(A, i)输出: array([ 0.]) array([ 1.]) array([ 2.]) array([ 3.]) array([ 4.])所以我相信这个代码是有效的。 - user3590169
1
这是我运行的程序 `import numpy as np A = np.array([]) for i in range(5): np.append(A, i)print A` 它返回 []。 - user3025898
谢谢,现在它可以工作了。你的程序中有没有一种方法可以将i保存为列或行? - user3025898
使用numpy.appendaxis关键字参数。这将需要通过转置来对齐轴,即A = numpy.append(A, row.T, axis=1) - Poik

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接