【发布时间】:2019-05-23 21:08:04
【问题描述】:
我想将 numpy 中给定数组的值更改为数组其他元素的乘积。因此,我想提取 multi_index 并对其进行操作,以便我可以识别位置并使用它。 (例如,遍历所有元素并始终执行“数组中的当前位置=数组中的下一个位置+位置上方”
我试图用当前位置的 multi_index 调用一个函数,并希望该函数接受它,例如增加一位。 ( ---> while n>=length 否则 ---> )
import numpy as np;
def fill(multi_index):
"This will get the new value of the current iteration value judgeing from its index"
return a[(multi_index + <0,1>) + (multi_index + <0,-1>) + (multi_index + <1,0>) + (multi_index + <-1,0>)]
#a = np.random.uniform(0, 100, size=(100, 100))
a = np.arange(6).reshape(2,3)
it = np.nditer(a, flags=['multi_index'], op_flags=['readwrite'])
while not it.finished:
it[0] = fill(it.multi_index)
print(it[0])
it.iternext()
"""for x in np.nditer(a, flags=['multi_index'], op_flags=['readwrite']):
print(x)"""
我不明白如何从 multi_index 中提取实际的“坐标”。我对python有点陌生,所以如果可能的话,请尝试彻底解释它。谢谢。
编辑:在我只使用 C++ 和一点 Java 编写代码之前,我以前主要使用数组(在 c++ 中会是这样的:
int main() {
int a[100][100];
for (int i=1, i<=a.length-1, i++) {
for (int j=1, i<=a.width-1, j++) {
a[i][j] = 1/4 (a[i][j+1]+a[i][j-1]+a[i+1][j]+a[i-1][j]);
}
}
return 0;
}
【问题讨论】:
-
远离
nditer,尤其是初学者。它不会提高迭代速度。用普通的索引 for 循环显示你正在尝试做的事情。 -
提供示例输入和首选输出也会有所帮助
-
通常输入是一个 100x100 的随机值数组,并且在迭代的各个步骤中,数组中的每个元素将被设置为相邻元素的 1/4。经过 1000 次左右的迭代,完成的数组将被打印出来。为了将元素的值更改为其相邻元素的乘积,我需要提取其“坐标”并(在单独的函数填充中)通过简单的乘法获得新值。目前填充功能中还没有任何内容。
-
在 for 循环中:
python for x in for x in np.nditer(a, flags=['multi_index'], op_flags=['readwrite']: a[x] = 1/4 ( a[mutil_index + <0,1>] + a[mutil_index + <0, -1>] + a[mutil_index + <1,1>] + a[mutil_index + <-1,-1>] )
标签: python numpy multidimensional-array array-indexing