我正在尝试使用索引和数组迭代访问numpy数组。 以下示例几乎总结了我的问题:
x = np.arange(12)
x.shape = (3,2,2)
nspace = np.array([[0,0], [0,1], [1,0], [1,1]])
for it in range(len(nspace)):
x[:,nspace(it)] = np.array([1,1,1])
如果一切按照我的想法进行,代码将打印4个单独的数组:
[0,4,8]
[1,5,9]
[2,6,10]
[3,7,11]
但是我得到一个错误。我知道我的索引编制是错误的,但是我无法弄清楚如何获得想要的结果。
所有事情都发生在循环中很重要,因为我希望能够更改x的尺寸。
EDIT0:我需要一个确实需要的常规解决方案。我要写:space [0,0],space [0,1]等。
EDIT1:我将打印更改为赋值操作,因为实际上需要的是赋值我在循环内调用的函数的结果。
EDIT2:我没有包括Traceback,因为我怀疑它会有用。无论如何,这里是:
Traceback (most recent call last):
File "<ipython-input-600-50905b8b5c4d>", line 5, in <module>
print(x[:,nspace(it)])
TypeError: 'numpy.ndarray' object is not callable
答案 0 :(得分:1)
您不需要使用for
循环。使用reshape
和transpose
。
x.reshape(3, 4).T
赠予:
array([[ 0, 4, 8],
[ 1, 5, 9],
[ 2, 6, 10],
[ 3, 7, 11]])
如果要迭代结果:
for row in x.reshape(3, 4).T:
print(row)
答案 1 :(得分:0)
出现错误,因为在最后一行上应该有方括号用于元素访问。
import numpy as np
x = np.arange(12)
x.shape = (3,2,2)
nspace = np.array([[0,0], [0,1], [1,0], [1,1]])
for it in range(len(nspace)):
print(x[:,nspace[it]])
编辑:
还有一种可能的方案来获得您期望的结果:
import numpy as np
x = np.arange(12)
x.shape = (3,2,2)
nspace = np.array([[0,0], [0,1], [1,0], [1,1]])
y = x.flatten()
for i in range(x.size//x.shape[0]):
print y[i::4]
答案 2 :(得分:0)
您需要提供第一个索引和第二个索引,并使用[]
括号而不是()
来访问数组元素。
import numpy as np
x = np.arange(12)
x.shape = (3,2,2)
for it in range(len(nspace)):
print(x[:,nspace[it][0], nspace[it][1]])
输出
[0 4 8]
[1 5 9]
[ 2 6 10]
[ 3 7 11]
您也可以直接将reshape
用作
x = np.arange(12).reshape(3,2,2)