Коллекции, такие как HashMap и HashSet, используют значение хэш-кода объекта для определения того, как объект должен храниться в коллекции, а хэш-код используется снова, чтобы помочь найти объект в коллекции.
Вот небольшой пример, почему мы должны переопределять equals () и hashcode (). Рассмотрим класс Employee, который имеет два возраста и имя поля.
public class Employee {
String name;
int age;
public Employee(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public boolean equals(Object obj) {
if (obj == this)
return true;
if (!(obj instanceof Employee))
return false;
Employee employee = (Employee) obj;
return employee.getAge() == this.getAge()
&& employee.getName() == this.getName();
}
// commented
/* @Override
public int hashCode() {
int result=17;
result=31*result+age;
result=31*result+(name!=null ? name.hashCode():0);
return result;
}
*/
}
Теперь создайте класс, вставьте объект Employee в HashSet и проверьте, присутствует ли этот объект.
public class ClientTest {
public static void main(String[] args) {
Employee employee = new Employee("rajeev", 24);
Employee employee1 = new Employee("rajeev", 25);
Employee employee2 = new Employee("rajeev", 24);
HashSet<Employee> employees = new HashSet<Employee>();
employees.add(employee);
System.out.println(employees.contains(employee2));
System.out.println("employee.hashCode(): " + employee.hashCode()
+ " employee2.hashCode():" + employee2.hashCode());
}
}
Он будет печатать
false
employee.hashCode(): 321755204 employee2.hashCode():375890482
Теперь раскомментируйте метод hashcode () выполните то же самое, и выход будет
true
employee.hashCode(): -938387308 employee2.hashCode():-938387308
. Теперь вы можете понять, почему, если два объекта считаются равными, их хэш-коды также должны быть равны? В противном случае вы никогда не сможете найти объект, поскольку метод hashcode по умолчанию в классе Object практически всегда содержит уникальный номер для каждого объекта, даже если метод equals () переопределяется таким образом, что два или более объекта считаются равными. Неважно, насколько равны объекты, если их хэш-коды не отражают это. Итак, еще раз: если два объекта равны, их хэш-коды также должны быть равны.
Это параметры подсеточной сетки, закодированные как одно целое. Например, «111» означает «сетка 1x1, первый подзаговор» и «234» означает «сетка 2x3, четвертый подзаговор».
Альтернативной формой для add_subplot(111)
является add_subplot(1, 1, 1)
.
Ответ от Constantin - это пятно, но для большего фона это поведение унаследовано от Matlab.
Поведение Matlab объясняется в разделе Figure Setup - Отображение нескольких графиков на рисунке в документации Matlab.
subplot (m, n , i) разбивает окно фигуры на матрицу m-by-n небольших подсетей и выбирает ее подзаголовок для текущего графика. Графики пронумерованы вдоль верхнего ряда окна фигуры, затем второго ряда и т. Д.
blockquote>
Я думаю, что это лучше всего объяснить следующим рисунком:
[/g1]
Чтобы инициализировать вышеизложенное, наберите:
import matplotlib.pyplot as plt
fig = plt.figure()
fig.add_subplot(221) #top left
fig.add_subplot(222) #top right
fig.add_subplot(223) #bottom left
fig.add_subplot(224) #bottom right
plt.show()
EDIT: Некоторая дополнительная информация
Следующие комбинации создают асимметричные расположения подзаголовков.
subplot(2,2,[1 3])
subplot(2,2,2)
subplot(2,2,4)
[/g2]
Вы также можете использовать оператор двоеточия для указания нескольких местоположений, если они находятся в последовательности.
subplot(2,2,1:2)
subplot(2,2,3)
subplot(2,2,4)
[/g3]
Ссылка здесь
Мое решение -
fig = plt.figure()
fig.add_subplot(1, 2, 1) #top and bottom left
fig.add_subplot(2, 2, 2) #top right
fig.add_subplot(2, 2, 4) #bottom right
plt.show()