英文:
Boolean Indexing in Array
问题
# 返回所有名字为 "Bob" 的数据值。
data[names == "Bob"]
# 返回名字为 "Bob" 对应的数据的第二列及以后的值。
data[names == "Bob", 1:]
# 返回名字为 "Bob" 对应的数据的第二列的值。
data[names == "Bob", 1]
英文:
names = np.array(["Bob", "Joe", "Will", "Bob", "Will", "Joe", "Joe"])
data = np.array([[4, 7], [0, 2], [-5, 6], [0, 0], [1, 2], [-12, -4], [3, 4]])
In: data[names == "Bob"]
Out: array([[4, 7], [0, 0]])
In: data[names = "Bob", 1:]
Out: array([[7], [0]])
In: data[names = "Bob", 1]
Out: array([7, 0])
I have 2 arrays and 3 Python statements here. I know that the first one would return all data values that matched with the name "Bob". But I don't know yet about the last 2 statements. The second one returned the second values of each paid of data, and the final one retunred a combination of that two values? Can anyone explain this to me, please? Thanks for your help!
答案1
得分: 1
这是切片操作。
Numpy的ndarrays支持在单个方括号内进行多维索引。每个值表示一个维度。
由于你的数组是二维的,你可以提供两个表达式 data[a, b]
-
a
将过滤第一维度,选择一些子数组,例如data[names == "Bob"]
-
b
将在第二维度中进行过滤,在每个子数组中选择一些值
使用普通列表
>>> values = [0,8,6,4,2,3,1,5,7]
>>> values[4]
2
>>> values[4:7] # 从索引4(包括)到7(不包括)的范围
[2, 3, 1]
在多维中相同
>>> data = np.array([[4, 7], [0, 2], [-5, 6], [0, 0], [1, 2], [-12, -4], [3, 4]])
# 选择每个子数组,但仅选择每个子数组的第一个值
>>> data[:, 0]
array([ 4, 0, -5, 0, 1, -12, 3])
# 选择每个子数组,但仅选择每个子数组的第二个值
>>> data[:, 1]
array([ 7, 2, 6, 0, 2, -4, 4])
# 选择每个子数组,但仅选择从第一个值开始的部分,因此每个都是一个数组
>>> data[:, 1:]
英文:
That is slicing.
Numpy ndarrays supports multi-dimension indexing in single brackets. Each value means a dimension.
As your array is in 2 dimension, you can provide 2 expressions data[a, b]
-
a
will filter the 1st dimension, select some subarrays likedata[names == "Bob"]
-
b
will filter in the 2nd dimension, select some values on each subarrays
With simple lists
>>> values = [0,8,6,4,2,3,1,5,7]
>>> values[4]
2
>>> values[4:7] # from index 4 included to 7 excluded
[2, 3, 1]
<!-- -->
Same in multiple dimensions
>>> data = np.array([[4, 7], [0, 2], [-5, 6], [0, 0], [1, 2], [-12, -4], [3, 4]])
# select every subarrays, but only each first value
>>> data[:, 0]
array([ 4, 0, -5, 0, 1, -12, 3])
# select every subarrays, but only each second value
>>> data[:, 1]
array([ 7, 2, 6, 0, 2, -4, 4])
# select every subarrays, but only FROM first value, so each is an array
>>> data[:, 1:]
array([[ 7],
[ 2],
[ 6],
[ 0],
[ 2],
[-4],
[ 4]])
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论