Один вкладыш (я не горжусь, но он выполняет эту работу):
class Myclass:
def __init__(self):
# do your stuff
globals()[type(self).__name__] = lambda: self # singletonify
Это, вероятно, проще всего сделать x[None, 10, :]
или эквивалентно (но более читаемым) x[np.newaxis, 10, :]
.
Насколько я понимаю, это не по умолчанию, я считаю, что постоянно иметь массивы с размерами синглтона очень раздражает очень быстро. Я предполагаю, что numpy devs чувствовали то же самое.
Кроме того, многоуровневая передача широковещательных массивов очень хорошо, поэтому обычно нет оснований сохранять размерность массива, из которого вышел срез. Если бы вы это сделали, то такие вещи, как:
a = np.zeros((100,100,10))
b = np.zeros(100,10)
a[0,:,:] = b
, либо не работали, либо было бы намного сложнее реализовать.
(Или, по крайней мере, это моя догадка о рассуждениях numpy dev за снижением информации о размере при разрезе)
Другое решение -
X[[10],:]
или
I = array([10])
X[I,:]
. Размерность массива сохраняется, когда индексирование выполняется списком (или массивом) индексов , Это приятно, потому что это оставляет вам выбор между сохранением размера и сжатием.
x = np.array([[1,2,3,4]])
, если вы затем нарезаете его с помощью x[[0],[1,2]]
, вы получите одномерное array([2, 3])
. Мое мнение заключается в выборе столбцов или векторов строк, чтобы сделать кусочек простым, а затем использовать np.reshape
, поэтому в моем примере это будет np.reshape(x[0,[1,2]],[1,2])
– Alexander
14 September 2015 в 01:43
X[[10]]
будет интерпретироваться как X[10]
, и форма будет меньше; аналогично, X[[10, 20]] == X[10, 20]
и форма еще меньше
– Ben Usman
15 June 2018 в 00:34
a
формы (10, 20, 30)
, то a[0, :, [0]]
будет иметь форму (1, 20)
, а не (20, 1)
, потому что в последних индексах передается на a[[0], :, [0]]
, что часто не совсем то, что вы ожидаете! В то время как a[0, :, :1]
даст вам (20, 1)
, как ожидалось. Более того, см. Выше комментарий для странного случая края с единственным индексом. В целом, похоже, что этот метод имеет слишком много краевых случаев.
– Ben Usman
26 July 2018 в 19:14
Я нашел несколько разумных решений.
1) использовать numpy.take(X,[10],0)
2) использовать эту странную индексацию X[10:11:, :]
В идеале это должно по умолчанию. Я никогда не понимал, почему размеры падают. Но это обсуждение для numpy ...
alist[0]
и сохраняются при их разрезе.
– hpaulj
13 May 2018 в 23:04
slice(n, n+1)
для извлечения индекса n
) должен быть принятым ответом, поскольку он является единственным, который естественным образом распространяется на n-мерный случай.
– norok2
20 August 2018 в 11:02
x[10,:,None]
возвращает массив формы(10,1)
, а не(1,10)
.. – Lisa 10 May 2016 в 13:13x[None, 10]
будет делать то, что вы хотите. – naught101 17 June 2016 в 01:02None
рядом с тускью, которую вы измельчите. – Mad Physicist 14 July 2016 в 19:36b
; это должно бытьb = np.zeros((100,10))
. – Jerzy 17 March 2017 в 21:18