我试图迭代两个numpy矩阵,一个大小为nx3,另一个大小为nx1
我正试图让nditer同时迭代他们的行。
所以如果我们有:
y = np.array([ [ 1],
[-1],
[ 1] ])
x = np.array([[ 1.3432504 , -1.3311479 , 1. ],
[ 1.8205529 , -0.6346681 , 1. ],
[ 0.98632067, -1.8885762 , 1. ]])
我试试:
for (a,b) in iterator:
print(a)
print(b)
这应该给予
[1]
[ 1.3432504 , -1.3311479 , 1. ]
[-1]
[ 1.8205529 , -0.6346681 , 1. ]
[1]
[ 0.98632067, -1.8885762 , 1. ]
我用'external_loop flag'尝试了np.nditer,我得到了x的所需输出,但是当我一次只想要一个时,它会强制y成为3个元素的束。
提前谢谢。
答案 0 :(得分:1)
您可以使用zip()
内置功能:
In [22]: for i, j in zip(y, x):
print(i);print(j)
....:
[1]
[ 1.3432504 -1.3311479 1. ]
[-1]
[ 1.8205529 -0.6346681 1. ]
[1]
[ 0.98632067 -1.8885762 1. ]
答案 1 :(得分:1)
难以控制深度'与In [35]: for i,j in np.nditer([y, x]):
...: print(i, j)
...:
1 1.3432504
1 -1.3311479
1 1.0
-1 1.8205529
-1 -0.6346681
-1 1.0
1 0.98632067
1 -1.8885762
1 1.0
的迭代。例如最简单的情况:
(i,j) pair of values for each broadcastable combination of
这会创建and
y .
x is (3, 3),
x is (3,1)
y x
,结果是迭代超过(3,3).flat。
(如果np.arange(n)
为nditer
,nditer
将生成(3,1)数组与(1,n)的所有组合,即(3,n)集。
您无法轻易告诉x
仅对external_loop
行进行迭代。 ndindex
有点做,但不可预测。
In [38]: for i,j in np.ndindex(2,3):
...: print(i,j)
...:
0 0
0 1
0 2
1 0
1 1
1 2
生成给定深度的索引,但它是通过创建正确形状的数组来实现的。
In [39]: for i in np.ndindex(3):
...: print(y[i], x[i,:])
...:
[1] [[ 1.3432504 -1.3311479 1. ]]
[-1] [[ 1.8205529 -0.6346681 1. ]]
[1] [[ 0.98632067 -1.8885762 1. ]]
或者迭代2个数组的行:
for i in range(3):
但你也可以使用np.nditer
。
cython
,无论如何都是开发c-api
或其他nditer
代码的垫脚石。 apply_along_axis
的c-api版本具有很强的功能和相对较好的速度。 python等价物不快也不强大。
您的评论提到了与ndindex
的进一步接口。这是用Python编写的,并使用$array = ["Lorem ipsum dolor sit amet, consectetur adipiscing elit",
"Praesent elementum mattis risus at condimentum","It was popularised","and a search","There are many variations",
"dolor Ipsum is not lrem", "dolor", "lrem", "dolor lrem"];
$text = "dolor lrem";
$strings = array_filter($array, function ($input) use ($text) {
// Your string accuracy algorithm
return ((similar_text($text, $input, $percent) * 10) >= 40);
});
print_r($strings);
为需要迭代的轴生成索引。它可以使某些任务更方便,但它不会加速你的代码。