gpt4 book ai didi

python - 迭代 numpy 数组并保持维度

转载 作者:太空宇宙 更新时间:2023-11-04 04:11:15 25 4
gpt4 key购买 nike

我想遍历 2D numpy 数组(尤其是使用 nditer)并保持迭代数组的维数。在这样做时,我想避免对迭代元素进行任何操作。解决方案应该只在迭代数组或迭代器上设置一次。

import numpy as np

X = np.random.randn(5, 2)

for row in X:
print(row.shape)

>>> (2,)
(2,)
(2,)
(2,)
(2,)

但是我想要:

>> (1, 2)
(1, 2)
(1, 2)
(1, 2)
(1, 2)

我想找到一个只能应用一次而不是像 row = row.reshape(1,-1) 这样的每一行的解决方案。

最佳答案

迭代一个数组就像迭代一个列表的列表——它返回在第一个维度上索引的元素:

In [48]: X = np.random.randn(5, 2)                                           
In [49]: X[0,:]
Out[49]: array([0.59964924, 0.46057338])
In [50]: for row in X:print(row)
[0.59964924 0.46057338]
[1.09308258 0.06495922]
[ 0.98928476 -1.07894574]
[-1.31303644 -0.34589506]
[0.31475676 0.3003112 ]

您可以迭代索引,并使用列表索引:

In [51]: for i in range(X.shape[0]): print(X[[i],:])                         
[[0.59964924 0.46057338]]
[[1.09308258 0.06495922]]
[[ 0.98928476 -1.07894574]]
[[-1.31303644 -0.34589506]]
[[0.31475676 0.3003112 ]]

X[[1]], X[1:2], X[1][None,:], >X[None,1] 都做同样的事情。

我认为没有办法将它们直接合并到

for ... in X:

表达式。

nditer 使用起来可能很尴尬。通常它在元素级别迭代,而不是在“行”级别,给我们一个 0d 数组。而且它并不比 for 迭代快。所以我认为它在这里没有用。

====

建议链接,Numpy index slice without losing dimension information , 启发我去尝试:

In [57]: for row in X[:,None]: print(row)                                    
[[0.59964924 0.46057338]]
[[1.09308258 0.06495922]]
[[ 0.98928476 -1.07894574]]
[[-1.31303644 -0.34589506]]
[[0.31475676 0.3003112 ]]

实际上,我将 X 转换为 (5,1,2) 数组,因此在第一个维度上的迭代会生成 (1,2) 个元素。我没有保留维度,而是添加了一个维度。

关于python - 迭代 numpy 数组并保持维度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56235771/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com