我有以下代码:
import numpy as np
a = np.array([[ 1, 2, 3, 4, 5, 6],
[ 7, 8, 9, 10, 11, 12]])
a[:, 2:3] #get [[[3],[9]]
a[:,[2]] # get [[3],[9]]
a[:, 2, None] # get [[3],[9]]
a[:, 2] #get [3, 9]
为什么a[:, 2]
得到[3,9]?
p.s。看到一些帖子谈论从2D数组中切出1列(如上面的示例)获得1D数组,但没有why
的解释。
p.p.s这个问题不是关于how-to
的问题,而是why
的问题。
答案 0 :(得分:0)
在第二个示例中,Numpy删除了单例尺寸。如果需要,您可以保留形状并获得与第一个示例等效的形状。
a[:, [2]] # get [[3],[9]]
答案 1 :(得分:-1)
我认为您使用术语1D
数组的方式定义不明确。
一个选项返回一个形状为(2,1)的数组,另一个选项返回一个类似列表的形状为(2,)的数组。
它们都是两者“一维”,但是它们具有不同的numpy形状。
因此,您的目标是获得形状更像矩阵的数组,形状为(2,1),这是通过将切片在所有维度上进行的,而不是选择一个特定的索引。
这是一个更直观的案例,可以通过切片或选择两个尺寸来将情况发挥到极致:
import numpy as np
a = np.array([[ 1, 2, 3, 4, 5, 6],
[ 7, 8, 9, 10, 11, 12]])
specific_index_value = a[0, 0]
print(specific_index_value)
print(type(specific_index_value))
print(str(specific_index_value) + ' is a scalar, not a 1X1 matrix')
>> 1
>> <class 'numpy.int32'>
>> 1 is a scalar, not a 1X1 matrix
sliced_index_value = a[:1, :1]
print(sliced_index_value)
print(type(sliced_index_value))
print(str(sliced_index_value) + ' is a matrix, with shape {}'.format(sliced_index_value.shape))
>> [[1]]
>> <class 'numpy.ndarray'>
>> [[1]] is a matrix, with shape (1, 1)
这有意义吗? 祝你好运!