我正在尝试对3D数组中切片的阈值进行矢量化处理。 不幸的是,阈值被应用于维度中的所有3个值。 我能想到的唯一方法是提取slice 1,然后将其放回到数组中,但是我敢肯定有更好的方法。 这是一些代码,用来解释我在做什么和我想做什么。 非常感谢您的协助。 J
# 1 "foo.c"
# 1 "<built-in>"
# 1 "<command-line>"
# 31 "<command-line>"
# 1 "/usr/include/stdc-predef.h" 1 3 4
# 1 "foo.c"
# 1 "/usr/include/stdio.h" 1 3 4
# 4 "foo.c"
int int(){
char str[5] = "test";
printf("this is a macro for printing a string: %s\n", str);;
return 0;
}
送礼:
import numpy as np
arr = np.arange(18).reshape(3, 2, 3)
arr[ arr[:,:,1] < 10 ] = 0
我一直希望:
array([[[ 0, 0, 0],
[ 0, 0, 0]],
[[ 0, 0, 0],
[ 9, 10, 11]],
[[12, 13, 14],
[15, 16, 17]]])
答案 0 :(得分:4)
这应该有效:
arr[:, :, 1][arr[:, :, 1] < 10] = 0
这将为arr
的维度arr[:, :, 1] < 10
的第二个元素创建一个布尔掩码:...
。然后,此布尔掩码仅用于索引其特定的数组切片。
省略号print(arr[..., 1])
# Out: array([[ 1, 4],
[ 7, 10],
[13, 16]])
是使最后一维的选择更具可读性的一个不错的功能。它将在明确索引的轴之前切片所有轴。
slc = (..., 1)
arr[slc][arr[slc] < 10] = 0
在这种情况下,您可以像这样使用它:
const request = new XMLHttpRequest();
request.responseType = "document";
request.overrideMimeType("text/html");
const xml = '<?xml version="1.0" encoding="UTF-8">
<places>
<store>
<coordinates>x, y</coordinates>
<name>store1</name>
<stock>
<item>
<itemname>tshirt</itemname>
<instock>5</instock>
</item>
</stock>
</store>
</places>'
答案 1 :(得分:4)
我们可以简单地使用比较掩码沿前两个轴进行索引,并在最后一个轴上使用切片,从而为我们提供了一种紧凑的方式-
arr[arr[:,:,1]<10, 1] = 0
样品运行-
In [47]: arr = np.arange(18).reshape(3, 2, 3)
In [48]: arr[arr[:,:,1] <10,1] = 0
In [49]: arr
Out[49]:
array([[[ 0, 0, 2],
[ 3, 0, 5]],
[[ 6, 0, 8],
[ 9, 10, 11]],
[[12, 13, 14],
[15, 16, 17]]])