Поскольку этот поток наткнулся, я собрал несколько точек для новых читателей в this
.
this
? Мы используем это подобно тому, как мы используем местоимения в естественных языках, таких как английский: «Джон работает быстро, потому что он пытается поймать поезд». Вместо этого мы могли бы написать «... Джон пытается поймать поезд ».
var person = {
firstName: "Penelope",
lastName: "Barrymore",
fullName: function () {
// We use "this" just as in the sentence above:
console.log(this.firstName + " " + this.lastName);
// We could have also written:
console.log(person.firstName + " " + person.lastName);
}
}
this
не присваивается значение, пока объект не вызовет функцию, в которой он определен. В глобальной области действия все глобальные переменные и функции определяются на объекте window
. Следовательно, this
в глобальной функции относится к (и имеет значение) глобальный объект window
.
Когда use strict
, this
в глобальном и в анонимных функциях, не связанных с каким-либо объектом, имеет значение undefined
.
Ключевое слово this
g0] наиболее непонятно , когда: 1) мы используем метод, который использует this
, 2) мы назначаем метод, который использует this
для переменной, 3) функция, которая использует this
, передается как функция обратного вызова и 4) this
используется внутри замыкания - внутренней функции. (2)
[/g10]
Определено в сценарии ECMA 6 , стрелка- функции принимают привязку this
из охватывающей (функциональной или глобальной) области.
function foo() {
// return an arrow function
return (a) => {
// `this` here is lexically inherited from `foo()`
console.log(this.a);
};
}
var obj1 = { a: 2 };
var obj2 = { a: 3 };
var bar = foo.call(obj1);
bar.call( obj2 ); // 2, not 3!
Хотя функции-стрелки предоставляют альтернативу использованию bind()
, важно отметить, что они по существу отключают традиционный механизм this
в пользу более широкого понимания лексического охвата. (1)
Ссылки:
A numpy.meshgrid
возвращает список из numpy.ndarray
.
Предположим, вы хотите создать meshgrid из следующих x
и y
:
x = np.random.randint(10, size=(5))
y = np.random.randint(10, size=(5))
meshgrid = np.meshgrid(x,y)
. Вы получили бы что-то вроде:
[array([[7, 1, 1, 0, 0],
[7, 1, 1, 0, 0],
[7, 1, 1, 0, 0],
[7, 1, 1, 0, 0],
[7, 1, 1, 0, 0]]), array([[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0],
[3, 3, 3, 3, 3],
[2, 2, 2, 2, 2],
[7, 7, 7, 7, 7]])]
Но это список, и список не имеет формы атрибута (AttributeError: 'list' object has no attribute 'shape'
).
Если вам нужно нарезать список как матрицу numpy, преобразуйте ее в массив numpy:
numpy_meshgrid = np.array(meshgrid)
Скорее всего, результат вашей функции func
также требует преобразования в numpy.ndarray
.
Теперь вы можете нарезать все, что вы хотите:
array= np.random.randint(10, size=(3, 4, 2, 2))
slice = array[:,:,0,0]
И результат:
array([[6, 7, 5, 3],
[1, 6, 0, 5],
[4, 5, 6, 9]])
type()
, почему я получаюtype <class 'numpy.ndarray'>
– sun0727 13 July 2018 в 14:27array[:,:,0,0]
, он возвращаетIndexError: too many indices for array
– sun0727 13 July 2018 в 14:54func
возвращает массив с формой(3, 4, 2, 2)
, это решение будет работать. Если вы предоставите минимальный рабочий примерfunc
, мы сможем помочь вам в этом. – Luca Cappelletti 13 July 2018 в 14:57np.vectorize
– sun0727 13 July 2018 в 15:03