100% found this document useful (1 vote)
52 views

Immediate download Python Data Analysis Numpy, Matplotlib and Pandas Bernd Klein ebooks 2024

Data

Uploaded by

chiapoporcia20
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
100% found this document useful (1 vote)
52 views

Immediate download Python Data Analysis Numpy, Matplotlib and Pandas Bernd Klein ebooks 2024

Data

Uploaded by

chiapoporcia20
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 65

Download Full Version ebook - Visit ebookmeta.

com

Python Data Analysis Numpy, Matplotlib and Pandas


Bernd Klein

https://ebookmeta.com/product/python-data-analysis-numpy-
matplotlib-and-pandas-bernd-klein/

OR CLICK HERE

DOWLOAD NOW

Discover More Ebook - Explore Now at ebookmeta.com


Instant digital products (PDF, ePub, MOBI) ready for you
Download now and discover formats that fit your needs...

Start reading on any device today!

Python Data Analytics: With Pandas, NumPy, and Matplotlib,


3rd Edition Fabio Nelli

https://ebookmeta.com/product/python-data-analytics-with-pandas-numpy-
and-matplotlib-3rd-edition-fabio-nelli/

ebookmeta.com

Python Data Analytics: With Pandas, NumPy, and Matplotlib,


3rd Edition Fabio Nelli

https://ebookmeta.com/product/python-data-analytics-with-pandas-numpy-
and-matplotlib-3rd-edition-fabio-nelli-2/

ebookmeta.com

Data Analysis with Python Introducing NumPy Pandas


Matplotlib and Essential Elements of Python Programming
1st Edition Rituraj Dixit
https://ebookmeta.com/product/data-analysis-with-python-introducing-
numpy-pandas-matplotlib-and-essential-elements-of-python-
programming-1st-edition-rituraj-dixit/
ebookmeta.com

An Introduction to Proof Theory: Normalization, Cut-


Elimination, and Consistency Proofs 1st Edition Paolo
Mancosu
https://ebookmeta.com/product/an-introduction-to-proof-theory-
normalization-cut-elimination-and-consistency-proofs-1st-edition-
paolo-mancosu/
ebookmeta.com
Urban Mobility and Social Equity in Latin America:
Evidence, Concepts, Methods 1st Edition Daniel Oviedo

https://ebookmeta.com/product/urban-mobility-and-social-equity-in-
latin-america-evidence-concepts-methods-1st-edition-daniel-oviedo/

ebookmeta.com

Find Build Sell How I Turned a 100 Backyard Bar into a 100
Million Pub Empire 1st Edition Stephen J Hunt

https://ebookmeta.com/product/find-build-sell-how-i-
turned-a-100-backyard-bar-into-a-100-million-pub-empire-1st-edition-
stephen-j-hunt/
ebookmeta.com

Essentials of Services Marketing, 4e Jochen Wirtz

https://ebookmeta.com/product/essentials-of-services-
marketing-4e-jochen-wirtz/

ebookmeta.com

Case Studies in Advanced Engineering Design Proceedings of


the 1st International Symposium 1st Edition C. Spitas

https://ebookmeta.com/product/case-studies-in-advanced-engineering-
design-proceedings-of-the-1st-international-symposium-1st-edition-c-
spitas/
ebookmeta.com

Bacterial Persistence 2nd Edition Natalie Verstraeten Jan


Michiels

https://ebookmeta.com/product/bacterial-persistence-2nd-edition-
natalie-verstraeten-jan-michiels/

ebookmeta.com
An Analysis of John Locke's Two Treatises of Government
(The Macat Library) 1st Edition Jeremy Kleidosty

https://ebookmeta.com/product/an-analysis-of-john-lockes-two-
treatises-of-government-the-macat-library-1st-edition-jeremy-
kleidosty/
ebookmeta.com
Data
Analysis

Numpy, Matplotlib and Pandas

by
Bernd Klein

bodenseo
© 2021 Bernd Klein

All rights reserved. No portion of this book may be reproduced or used in any
manner without written permission from the copyright owner.

For more information, contact address: [email protected]

www.python-course.eu
Python Course
Data Analysis With
Python by Bernd
Klein
Numpy Tutorial ..........................................................................................................................8
Numpy Tutorial: Creating Arrays.............................................................................................17
Data Type Objects, dtype..........................................................................................................36
Numerical Operations on Numpy Arrays.................................................................................48
Numpy Arrays: Concatenating, Flattening and Adding Dimensions .......................................68
Python, Random Numbers and Probability ..............................................................................79
Weighted Probabilities..............................................................................................................90
Synthetical Test Data With Python.........................................................................................119
Numpy: Boolean Indexing......................................................................................................136
Matrix Multiplicaion, Dot and Cross Product ........................................................................143
Reading and Writing Data Files .............................................................................................149
Overview of Matplotlib ..........................................................................................................157
Format Plots............................................................................................................................168
Matplotlib Tutorial..................................................................................................................172
Shading Regions with fill_between() .....................................................................................183
Matplotlib Tutorial: Spines and Ticks ....................................................................................186
Matplotlib Tutorial, Adding Legends and Annotations..........................................................197
Matplotlib Tutorial: Subplots .................................................................................................212
Exercise ....................................................................................................................................44
Exercise ....................................................................................................................................44
Matplotlib Tutorial: Gridspec .................................................................................................239
GridSpec using SubplotSpec ..................................................................................................244
Matplotlib Tutorial: Histograms and Bar Plots ......................................................................248
Matplotlib Tutorial: Contour Plots .........................................................................................268
Introduction into Pandas.........................................................................................................303
Data Structures .......................................................................................................................305
Accessing and Changing values of DataFrames.....................................................................343
Pandas: groupby .....................................................................................................................361
Reading and Writing Data ......................................................................................................380
Dealing with NaN...................................................................................................................394
Binning in Python and Pandas................................................................................................404
Expenses and Income Example ..............................................................................................465
Net Income Method Example.................................................................................................478
3
NUMERICAL PROGRAMMING WITH
PYTHON

NUMERICAL PROGRAMMING DEFINITION


The term "Numerical Computing" - a.k.a. numerical computing or scientific computing - can be misleading.
One can think about it as "having to do with numbers" as opposed to algorithms dealing with texts for
example. If you think of Google and the way it provides links to websites for your search inquiries, you may
think about the underlying algorithm as a text based one. Yet, the core of the Google search engine is
numerical. To perform the PageRank algorithm Google executes the world's largest matrix computation.

Numerical Computing defines an area of computer science and mathematics dealing with algorithms for
numerical approximations of problems from mathematical or numerical analysis, in other words: Algorithms
solving problems involving continuous variables. Numerical analysis is used to solve science and engineering
problems.

DATA SCIENCE AND DATA ANALYSIS


This tutorial can be used as an online course on Numerical Python as it is needed by Data Scientists and Data
Analysts.

Data science is an interdisciplinary subject which includes for example statistics and computer science,
especially programming and problem solving skills. Data Science includes everything which is necessary to
create and prepare data, to manipulate, filter and clense data and to analyse data. Data can be both structured
and unstructured. We could also say Data Science includes all the techniques needed to extract and gain
information and insight from data.

Data Science is an umpbrella term which incorporates data analysis, statistics, machine learning and other
related scientific fields in order to understand and analyze data.

Another term occuring quite often in this context is "Big Data". Big Data is for sure one of the most often used
buzzwords in the software-related marketing world. Marketing managers have found out that using this term
can boost the sales of their products, regardless of the fact if they are really dealing with big data or not. The
term is often used in fuzzy ways.

Big data is data which is too large and complex, so that it is hard for data-processing application software to
deal with them. The problems include capturing and collecting data, data storage, search the data, visualization
of the data, querying, and so on.

The following concepts are associated with big data:

• volume:
the sheer amount of data, whether it will be giga-, tera-, peta- or exabytes
• velocity:
the speed of arrival and processing of data
• veracity:

4
uncertainty or imprecision of data
• variety:
the many sources and types of data both structured and unstructured

The big question is how useful Python is for these purposes. If we would only use Python without any special
modules, this language could only poorly perform on the previously mentioned tasks. We will describe the
necessary tools in the following chapter.

CONNECTIONS BETWEEN PYTHON, NUMPY, MATPLOTLIB, SCIPY AND


PANDAS
Python is a general-purpose language and as such it can and it is
widely used by system administrators for operating system
administration, by web developpers as a tool to create dynamic
websites and by linguists for natural language processing tasks.
Being a truely general-purpose language, Python can of course -
without using any special numerical modules - be used to solve
numerical problems as well. So far so good, but the crux of the
matter is the execution speed. Pure Python without any
numerical modules couldn't be used for numerical tasks Matlab,
R and other languages are designed for. If it comes to
computational problem solving, it is of greatest importance to
consider the performance of algorithms, both concerning speed
and data usage.

If we use Python in combination with its modules NumPy,


SciPy, Matplotlib and Pandas, it belongs to the top numerical
programming languages. It is as efficient - if not even more
efficient - than Matlab or R.

5
Numpy is a module which provides the basic data structures,
implementing multi-dimensional arrays and matrices. Besides
that the module supplies the necessary functionalities to create
and manipulate these data structures. SciPy is based on top of
Numpy, i.e. it uses the data structures provided by NumPy. It
extends the capabilities of NumPy with further useful functions
for minimization, regression, Fourier-transformation and many
others.

Matplotlib is a plotting library for the Python programming


language and the numerically oriented modules like NumPy and
SciPy.

The youngest child in this family of modules is Pandas. Pandas


is using all of the previously mentioned modules. It's build on
top of them to provide a module for the Python language, which
is also capable of data manipulation and analysis. The special
focus of Pandas consists in offering data structures and
operations for manipulating numerical tables and time series. The name is derived from the term "panel data".
Pandas is well suited for working with tabular data as it is known from spread sheet programming like Excel.

PYTHON, AN ALTERNATIVE TO MATLAB


Python is becoming more and more the main programming language for data scientists. Yet, there are still
many scientists and engineers in the scientific and engineering world that use R and MATLAB to solve their
data analysis and data science problems. It's a question troubling lots of people, which language they should
choose: The functionality of R was developed with statisticians in mind, whereas Python is a general-purpose
language. Nevertheless, Python is also - in combination with its specialized modules, like Numpy, Scipy,
Matplotlib, Pandas and so, - an ideal programming language for solving numerical problems. Furthermore, the
community of Python is a lot larger and faster growing than the one from R.

The principal disadvantage of MATLAB against Python are the costs. Python with NumPy, SciPy, Matplotlib
and Pandas is completely free, whereas MATLAB can be very expensive. "Free" means both "free" as in "free
beer" and "free" as in "freedom"! Even though MATLAB has a huge number of additional toolboxes available,
Python has the advantage that it is a more modern and complete programming language. Python is continually
becoming more powerful by a rapidly growing number of specialized modules.

Python in combination with Numpy, Scipy, Matplotlib and Pandas can be used as a complete replacement for
MATLAB.

6
7
NUMPY TUTORIAL

INTRODUCTION
NumPy is a module for Python. The name is an acronym for
"Numeric Python" or "Numerical Python". It is pronounced
/ˈnʌmpaɪ/ (NUM-py) or less often /ˈnʌmpi (NUM-pee)). It is an
extension module for Python, mostly written in C. This makes
sure that the precompiled mathematical and numerical functions
and functionalities of Numpy guarantee great execution speed.

Furthermore, NumPy enriches the programming language


Python with powerful data structures, implementing multi-
dimensional arrays and matrices. These data structures
guarantee efficient calculations with matrices and arrays. The
implementation is even aiming at huge matrices and arrays,
better know under the heading of "big data". Besides that the
module supplies a large library of high-level mathematical functions to operate on these matrices and arrays.

SciPy (Scientific Python) is often mentioned in the same breath with NumPy. SciPy needs Numpy, as it is
based on the data structures of Numpy and furthermore its basic creation and manipulation functions. It
extends the capabilities of NumPy with further useful functions for minimization, regression, Fourier-
transformation and many others.

Both NumPy and SciPy are not part of a basic Python installation. They have to be installed after the Python
installation. NumPy has to be installed before installing SciPy.

(Comment: The diagram of the image on the right side is the graphical visualisation of a matrix with 14 rows
and 20 columns. It's a so-called Hinton diagram. The size of a square within this diagram corresponds to the
size of the value of the depicted matrix. The colour determines, if the value is positive or negative. In our
example: the colour red denotes negative values and the colour green denotes positive values.)

NumPy is based on two earlier Python modules dealing with arrays. One of these is Numeric. Numeric is like
NumPy a Python module for high-performance, numeric computing, but it is obsolete nowadays. Another
predecessor of NumPy is Numarray, which is a complete rewrite of Numeric but is deprecated as well. NumPy
is a merger of those two, i.e. it is build on the code of Numeric and the features of Numarray.

COMPARISON BETWEEN CORE PYTHON AND NUMPY

8
When we say "Core Python", we mean Python without any special modules, i.e. especially without NumPy.

The advantages of Core Python:

• high-level number objects: integers, floating point


• containers: lists with cheap insertion and append methods, dictionaries with fast lookup

Advantages of using Numpy with Python:

• array oriented computing


• efficiently implemented multi-dimensional arrays
• designed for scientific computation

A SIMPLE NUMPY EXAMPLE


Before we can use NumPy we will have to import it. It has to be imported like any other module:

import numpy

But you will hardly ever see this. Numpy is usually renamed to np:

import numpy as np

Our first simple Numpy example deals with temperatures. Given is a list with values, e.g. temperatures in
Celsius:

cvalues = [20.1, 20.8, 21.9, 22.5, 22.7, 22.3, 21.8, 21.2, 20.9, 2
0.1]

We will turn our list "cvalues" into a one-dimensional numpy array:

C = np.array(cvalues)
print(C)
[20.1 20.8 21.9 22.5 22.7 22.3 21.8 21.2 20.9 20.1]
Let's assume, we want to turn the values into degrees Fahrenheit. This is very easy to accomplish with a
numpy array. The solution to our problem can be achieved by simple scalar multiplication:
print(C * 9 / 5 + 32)
[68.18 69.44 71.42 72.5 72.86 72.14 71.24 70.16 69.62 68.18]

9
The array C has not been changed by this expression:

print(C)
[20.1 20.8 21.9 22.5 22.7 22.3 21.8 21.2 20.9 20.1]

Compared to this, the solution for our Python list looks awkward:

fvalues = [ x*9/5 + 32 for x in cvalues]


print(fvalues)
[68.18, 69.44, 71.42, 72.5, 72.86, 72.14, 71.24000000000001, 70.1
6, 69.62, 68.18]

So far, we referred to C as an array. The internal type is "ndarray" or to be even more precise "C is an instance
of the class numpy.ndarray":

type(C)
Output: numpy.ndarray

In the following, we will use the terms "array" and "ndarray" in most cases synonymously.

GRAPHICAL REPRESENTATION OF THE VALUES


Even though we want to cover the module matplotlib not until a later chapter, we want to demonstrate how we
can use this module to depict our temperature values. To do this, we us the package pyplot from matplotlib.

If you use the jupyter notebook, you might be well advised to include the following line of code to prevent an
external window to pop up and to have your diagram included in the notebook:

%matplotlib inline

The code to generate a plot for our values looks like this:

import matplotlib.pyplot as plt

plt.plot(C)
plt.show()

10
The function plot uses the values of the array C for the values of the ordinate, i.e. the y-axis. The indices of the
array C are taken as values for the abscissa, i.e. the x-axis.

MEMORY CONSUMPTION: NDARRAY AND LIST


The main benefits of using numpy arrays should be smaller memory consumption and better runtime
behaviour. We want to look at the memory usage of numpy arrays in this subchapter of our turorial and
compare it to the memory consumption of Python lists.

11
To calculate the memory consumption of the list from the above picture, we will use the function getsizeof
from the module sys.

from sys import getsizeof as size

lst = [24, 12, 57]

size_of_list_object = size(lst) # only green box


size_of_elements = len(lst) * size(lst[0]) # 24, 12, 57

total_list_size = size_of_list_object + size_of_elements


print("Size without the size of the elements: ", size_of_list_obje
ct)
print("Size of all the elements: ", size_of_elements)
print("Total size of list, including elements: ", total_list_size)
Size without the size of the elements: 96
Size of all the elements: 84
Total size of list, including elements: 180

The size of a Python list consists of the general list information, the size needed for the references to the
elements and the size of all the elements of the list. If we apply sys.getsizeof to a list, we get only the size
without the size of the elements. In the previous example, we made the assumption that all the integer
elements of our list have the same size. Of course, this is not valid in general, because memory consumption
will be higher for larger integers.

We will check now, how the memory usage changes, if we add another integer element to the list. We also
look at an empty list:

lst = [24, 12, 57, 42]

size_of_list_object = size(lst) # only green box


size_of_elements = len(lst) * size(lst[0]) # 24, 12, 57, 42

total_list_size = size_of_list_object + size_of_elements


print("Size without the size of the elements: ", size_of_list_obje
ct)
print("Size of all the elements: ", size_of_elements)
print("Total size of list, including elements: ", total_list_size)

lst = []
print("Emtpy list size: ", size(lst))

12
Size without the size of the elements: 104
Size of all the elements: 112
Total size of list, including elements: 216
Emtpy list size: 72

We can conclude from this that for every new element, we need another eight bytes for the reference to the
new object. The new integer object itself consumes 28 bytes. The size of a list "lst" without the size of the
elements can be calculated with:

64 + 8 * len(lst)

To get the complete size of an arbitrary list of integers, we have to add the sum of all the sizes of the integers.

We will examine now the memory consumption of a numpy.array. To this purpose, we will have a look at the
implementation in the following picture:

We will create the numpy array of the previous diagram and calculate the memory usage:

a = np.array([24, 12, 57])


print(size(a))
120

We get the memory usage for the general array information by creating an empty array:

e = np.array([])
print(size(e))
96

13
We can see that the difference between the empty array "e" and the array "a" with three integers consists in 24
Bytes. This means that an arbitrary integer array of length "n" in numpy needs

96 + n * 8 Bytes

whereas a list of integers needs, as we have seen before

64 + 8 len(lst) + len(lst) 28

This is a minimum estimation, as Python integers can use more than 28 bytes.

When we define a Numpy array, numpy automatically chooses a fixed integer size. In our example "int64".
We can determine the size of the integers, when we define an array. Needless to say, this changes the memory
requirement:

a = np.array([24, 12, 57], np.int8)


print(size(a) - 96)

a = np.array([24, 12, 57], np.int16)


print(size(a) - 96)

a = np.array([24, 12, 57], np.int32)


print(size(a) - 96)

a = np.array([24, 12, 57], np.int64)


print(size(a) - 96)
3
6
12
24

TIME COMPARISON BETWEEN PYTHON LISTS AND NUMPY ARRAYS


One of the main advantages of NumPy is its advantage in time compared to standard Python. Let's look at the
following functions:

import time
size_of_vec = 1000

def pure_python_version():
t1 = time.time()

14
X = range(size_of_vec)
Y = range(size_of_vec)
Z = [X[i] + Y[i] for i in range(len(X)) ]
return time.time() - t1

def numpy_version():
t1 = time.time()
X = np.arange(size_of_vec)
Y = np.arange(size_of_vec)
Z = X + Y
return time.time() - t1

Let's call these functions and see the time consumption:

t1 = pure_python_version()
t2 = numpy_version()

print(t1, t2)
print("Numpy is in this example " + str(t1/t2) + " faster!")
0.0010614395141601562 5.2928924560546875e-05
Numpy is in this example 20.054054054054053 faster!

It's an easier and above all better way to measure the times by using the timeit module. We will use the Timer
class in the following script.

The constructor of a Timer object takes a statement to be timed, an additional statement used for setup, and a
timer function. Both statements default to 'pass'.

The statements may contain newlines, as long as they don't contain multi-line string literals.

A Timer object has a timeit method. timeit is called with a parameter number:

timeit(number=1000000)

The main statement will be executed "number" times. This executes the setup statement once, and then returns
the time it takes to execute the main statement a "number" of times. It returns the time in seconds.

import numpy as np
from timeit import Timer

size_of_vec = 1000

X_list = range(size_of_vec)
Y_list = range(size_of_vec)

15
X = np.arange(size_of_vec)
Y = np.arange(size_of_vec)

def pure_python_version():
Z = [X_list[i] + Y_list[i] for i in range(len(X_list)) ]

def numpy_version():
Z = X + Y

#timer_obj = Timer("x = x + 1", "x = 0")


timer_obj1 = Timer("pure_python_version()",
"from __main__ import pure_python_version")
timer_obj2 = Timer("numpy_version()",
"from __main__ import numpy_version")

for i in range(3):
t1 = timer_obj1.timeit(10)
t2 = timer_obj2.timeit(10)
print("time for pure Python version: ", t1)
print("time for Numpy version: ", t2)
print(f"Numpy was {t1 / t2:7.2f} times faster!")
time for pure Python version: 0.0021230499987723306
time for Numpy version: 0.0004346180066931993
Numpy was 4.88 times faster!
time for pure Python version: 0.003020321993972175
time for Numpy version: 0.00014882600225973874
Numpy was 20.29 times faster!
time for pure Python version: 0.002028984992648475
time for Numpy version: 0.0002098319964716211
Numpy was 9.67 times faster!

The repeat() method is a convenience to call timeit() multiple times and return a list of results:

print(timer_obj1.repeat(repeat=3, number=10))
print(timer_obj2.repeat(repeat=3, number=10))
[0.0030275019962573424, 0.002999588003149256, 0.002212086998042650
5]
[6.104000203777105e-05, 0.0001641790004214272, 1.904800592456013
e-05]
In [ ]:

16
NUMPY TUTORIAL: CREATING ARRAYS

We have alreday seen in the previous chapter of our Numpy


tutorial that we can create Numpy arrays from lists and tuples.
We want to introduce now further functions for creating basic
arrays.

There are functions provided by Numpy to create arrays with


evenly spaced values within a given interval. One 'arange' uses a
given distance and the other one 'linspace' needs the number of
elements and creates the distance automatically.

CREATION OF ARRAYS WITH EVENLY SPACED VALUES

ARANGE
The syntax of arange:

arange([start,] stop[, step], [, dtype=None])

arange returns evenly spaced values within a given interval. The values are generated within the half-open
interval '[start, stop)' If the function is used with integers, it is nearly equivalent to the Python built-in function
range, but arange returns an ndarray rather than a list iterator as range does. If the 'start' parameter is not given,
it will be set to 0. The end of the interval is determined by the parameter 'stop'. Usually, the interval will not
include this value, except in some cases where 'step' is not an integer and floating point round-off affects the
length of output ndarray. The spacing between two adjacent values of the output array is set with the optional
parameter 'step'. The default value for 'step' is 1. If the parameter 'step' is given, the 'start' parameter cannot be
optional, i.e. it has to be given as well. The type of the output array can be specified with the parameter 'dtype'.
If it is not given, the type will be automatically inferred from the other input arguments.

import numpy as np

a = np.arange(1, 10)
print(a)

x = range(1, 10)

17
print(x) # x is an iterator
print(list(x))

# further arange examples:


x = np.arange(10.4)
print(x)
x = np.arange(0.5, 10.4, 0.8)
print(x)
[1 2 3 4 5 6 7 8 9]
range(1, 10)
[1, 2, 3, 4, 5, 6, 7, 8, 9]
[ 0. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.]
[ 0.5 1.3 2.1 2.9 3.7 4.5 5.3 6.1 6.9 7.7 8.5 9.3 10.1]

Be careful, if you use a float value for the step parameter, as you can see in the following example:

np.arange(12.04, 12.84, 0.08)


Output: array([12.04, 12.12, 12.2 , 12.28, 12.36, 12.44, 12.52, 12.6
, 12.68,
12.76, 12.84])

The help of arange has to say the following for the stop parameter: "End of interval. The interval does
not include this value, except in some cases where step is not an integer and floating point round-off
affects the length of out . This is what happened in our example.

The following usages of arange is a bit offbeat. Why should we use float values, if we want integers as
result. Anyway, the result might be confusing. Before arange starts, it will round the start value, end value and
the stepsize:

x = np.arange(0.5, 10.4, 0.8, int)


print(x)
[ 0 1 2 3 4 5 6 7 8 9 10 11 12]

This result defies all logical explanations. A look at help also helps here: "When using a non-integer step, such
as 0.1, the results will often not be consistent. It is better to use numpy.linspace for these cases. Using
linspace is not an easy workaround in some situations, because the number of values has to be known.

18
LINSPACE
The syntax of linspace:

linspace(start, stop, num=50, endpoint=True, retstep=False)

linspace returns an ndarray, consisting of 'num' equally spaced samples in the closed interval [start, stop] or the
half-open interval [start, stop). If a closed or a half-open interval will be returned, depends on whether
'endpoint' is True or False. The parameter 'start' defines the start value of the sequence which will be created.
'stop' will the end value of the sequence, unless 'endpoint' is set to False. In the latter case, the resulting
sequence will consist of all but the last of 'num + 1' evenly spaced samples. This means that 'stop' is excluded.
Note that the step size changes when 'endpoint' is False. The number of samples to be generated can be set
with 'num', which defaults to 50. If the optional parameter 'endpoint' is set to True (the default), 'stop' will be
the last sample of the sequence. Otherwise, it is not included.

import numpy as np

# 50 values between 1 and 10:


print(np.linspace(1, 10))
# 7 values between 1 and 10:
print(np.linspace(1, 10, 7))
# excluding the endpoint:
print(np.linspace(1, 10, 7, endpoint=False))
[ 1. 1.18367347 1.36734694 1.55102041 1.73469388 1.91
836735
2.10204082 2.28571429 2.46938776 2.65306122 2.83673469 3.02
040816
3.20408163 3.3877551 3.57142857 3.75510204 3.93877551 4.12
244898
4.30612245 4.48979592 4.67346939 4.85714286 5.04081633 5.22
44898
5.40816327 5.59183673 5.7755102 5.95918367 6.14285714 6.32
653061
6.51020408 6.69387755 6.87755102 7.06122449 7.24489796 7.42
857143
7.6122449 7.79591837 7.97959184 8.16326531 8.34693878 8.53
061224
8.71428571 8.89795918 9.08163265 9.26530612 9.44897959 9.63
265306
9.81632653 10. ]
[ 1. 2.5 4. 5.5 7. 8.5 10. ]
[1. 2.28571429 3.57142857 4.85714286 6.14285714 7.42857143
8.71428571]

19
We haven't discussed one interesting parameter so far. If the optional parameter 'retstep' is set, the function
will also return the value of the spacing between adjacent values. So, the function will return a tuple
('samples', 'step'):

import numpy as np

samples, spacing = np.linspace(1, 10, retstep=True)


print(spacing)
samples, spacing = np.linspace(1, 10, 20, endpoint=True, retstep=T
rue)
print(spacing)
samples, spacing = np.linspace(1, 10, 20, endpoint=False, retste
p=True)
print(spacing)
0.1836734693877551
0.47368421052631576
0.45

ZERO-DIMENSIONAL ARRAYS IN NUMPY


It's possible to create multidimensional arrays in numpy. Scalars are zero dimensional. In the following
example, we will create the scalar 42. Applying the ndim method to our scalar, we get the dimension of the
array. We can also see that the type is a "numpy.ndarray" type.

import numpy as np
x = np.array(42)
print("x: ", x)
print("The type of x: ", type(x))
print("The dimension of x:", np.ndim(x))
x: 42
The type of x: <class 'numpy.ndarray'>
The dimension of x: 0

ONE-DIMENSIONAL ARRAYS
We have already encountered a 1-dimenional array - better known to some as vectors - in our initial example.
What we have not mentioned so far, but what you may have assumed, is the fact that numpy arrays are
containers of items of the same type, e.g. only integers. The homogenous type of the array can be determined
with the attribute "dtype", as we can learn from the following example:

F = np.array([1, 1, 2, 3, 5, 8, 13, 21])


V = np.array([3.4, 6.9, 99.8, 12.8])

20
print("F: ", F)
print("V: ", V)
print("Type of F: ", F.dtype)
print("Type of V: ", V.dtype)
print("Dimension of F: ", np.ndim(F))
print("Dimension of V: ", np.ndim(V))
F: [ 1 1 2 3 5 8 13 21]
V: [ 3.4 6.9 99.8 12.8]
Type of F: int64
Type of V: float64
Dimension of F: 1
Dimension of V: 1

TWO- AND MULTIDIMENSIONAL ARRAYS


Of course, arrays of NumPy are not limited to one dimension. They are of arbitrary dimension. We create them
by passing nested lists (or tuples) to the array method of numpy.

A = np.array([ [3.4, 8.7, 9.9],


[1.1, -7.8, -0.7],
[4.1, 12.3, 4.8]])
print(A)
print(A.ndim)
[[ 3.4 8.7 9.9]
[ 1.1 -7.8 -0.7]
[ 4.1 12.3 4.8]]
2

B = np.array([ [[111, 112], [121, 122]],


[[211, 212], [221, 222]],
[[311, 312], [321, 322]] ])
print(B)
print(B.ndim)
[[[111 112]
[121 122]]

[[211 212]
[221 222]]

[[311 312]
[321 322]]]
3

21
SHAPE OF AN ARRAY
The function "shape" returns the shape of an array. The shape is a tuple of
integers. These numbers denote the lengths of the corresponding array
dimension. In other words: The "shape" of an array is a tuple with the number
of elements per axis (dimension). In our example, the shape is equal to (6, 3),
i.e. we have 6 lines and 3 columns.

x = np.array([ [67, 63, 87],


[77, 69, 59],
[85, 87, 99],
[79, 72, 71],
[63, 89, 93],
[68, 92, 78]])

print(np.shape(x))
(6, 3)

There is also an equivalent array property:

print(x.shape)
(6, 3)

The shape of an array tells us also something about the order in which the indices
are processed, i.e. first rows, then columns and after that the further dimensions.

"shape" can also be used to change the shape of an array.

x.shape = (3, 6)
print(x)
[[67 63 87 77 69 59]
[85 87 99 79 72 71]
[63 89 93 68 92 78]]

x.shape = (2, 9)
print(x)

22
[[67 63 87 77 69 59 85 87 99]
[79 72 71 63 89 93 68 92 78]]

You might have guessed by now that the new shape must correspond to the number of elements of the array,
i.e. the total size of the new array must be the same as the old one. We will raise an exception, if this is not the
case.

Let's look at some further examples.

The shape of a scalar is an empty tuple:

x = np.array(11)
print(np.shape(x))
()

B = np.array([ [[111, 112, 113], [121, 122, 123]],


[[211, 212, 213], [221, 222, 223]],
[[311, 312, 313], [321, 322, 323]],
[[411, 412, 413], [421, 422, 423]] ])

print(B.shape)
(4, 2, 3)

INDEXING AND SLICING


Assigning to and accessing the elements of an array is similar to other sequential data types of Python, i.e. lists
and tuples. We have also many options to indexing, which makes indexing in Numpy very powerful and
similar to the indexing of lists and tuples.

Single indexing behaves the way, you will most probably expect it:

F = np.array([1, 1, 2, 3, 5, 8, 13, 21])


# print the first element of F
print(F[0])
# print the last element of F
print(F[-1])
1
21

23
Indexing multidimensional arrays:

A = np.array([ [3.4, 8.7, 9.9],


[1.1, -7.8, -0.7],
[4.1, 12.3, 4.8]])

print(A[1][0])
1.1

We accessed an element in the second row, i.e. the row with the index 1, and the first column (index 0). We
accessed it the same way, we would have done with an element of a nested Python list.

You have to be aware of the fact, that way of accessing multi-dimensional arrays can be highly inefficient. The
reason is that we create an intermediate array A[1] from which we access the element with the index 0. So it
behaves similar to this:

tmp = A[1]
print(tmp)
print(tmp[0])
[ 1.1 -7.8 -0.7]
1.1

There is another way to access elements of multi-dimensional arrays in Numpy: We use only one pair of
square brackets and all the indices are separated by commas:

print(A[1, 0])
1.1

We assume that you are familar with the slicing of lists and tuples. The syntax is the same in numpy for one-
dimensional arrays, but it can be applied to multiple dimensions as well.

The general syntax for a one-dimensional array A looks like this:

A[start:stop:step]

We illustrate the operating principle of "slicing" with some examples. We start with the easiest case, i.e. the
slicing of a one-dimensional array:

S = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
print(S[2:5])
print(S[:4])
print(S[6:])

24
print(S[:])
[2 3 4]
[0 1 2 3]
[6 7 8 9]
[0 1 2 3 4 5 6 7 8 9]

We will illustrate the multidimensional slicing in the following examples. The ranges for each dimension are
separated by commas:

A = np.array([
[11, 12, 13, 14, 15],
[21, 22, 23, 24, 25],
[31, 32, 33, 34, 35],
[41, 42, 43, 44, 45],
[51, 52, 53, 54, 55]])

print(A[:3, 2:])
[[13 14 15]
[23 24 25]
[33 34 35]]

print(A[3:, :])
[[41 42 43 44 45]
[51 52 53 54 55]]

25
print(A[:, 4:])
[[15]
[25]
[35]
[45]
[55]]

The following two examples use the third parameter "step". The reshape function is used to construct the two-
dimensional array. We will explain reshape in the following subchapter:

X = np.arange(28).reshape(4, 7)
print(X)
[[ 0 1 2 3 4 5 6]
[ 7 8 9 10 11 12 13]
[14 15 16 17 18 19 20]
[21 22 23 24 25 26 27]]

print(X[::2, ::3])
[[ 0 3 6]
[14 17 20]]

26
print(X[::, ::3])
[[ 0 3 6]
[ 7 10 13]
[14 17 20]
[21 24 27]]

If the number of objects in the selection tuple is less than the dimension N, then : is assumed
for any subsequent dimensions:

A = np.array(
[ [ [45, 12, 4], [45, 13, 5], [46, 12, 6] ],
[ [46, 14, 4], [45, 14, 5], [46, 11, 5] ],
[ [47, 13, 2], [48, 15, 5], [52, 15, 1] ] ])

A[1:3, 0:2] # equivalent to A[1:3, 0:2, :]


Output: array([[[46, 14, 4],
[45, 14, 5]],

[[47, 13, 2],


[48, 15, 5]]])

27
Attention: Whereas slicings on lists and tuples create new objects, a slicing operation on an array creates a
view on the original array. So we get an another possibility to access the array, or better a part of the array.
From this follows that if we modify a view, the original array will be modified as well.

A = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
S = A[2:6]
S[0] = 22
S[1] = 23
print(A)
[ 0 1 22 23 4 5 6 7 8 9]

Doing the similar thing with lists, we can see that we get a copy:

lst = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
lst2 = lst[2:6]
lst2[0] = 22
lst2[1] = 23
print(lst)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

If you want to check, if two array names share the same memory block, you can use the function
np.may_share_memory.

np.may_share_memory(A, B)

To determine if two arrays A and B can share memory the memory-bounds of A and B are computed. The
function returns True, if they overlap and False otherwise. The function may give false positives, i.e. if it
returns True it just means that the arrays may be the same.

np.may_share_memory(A, S)
Output: True

The following code shows a case, in which the use of may_share_memory is quite useful:

A = np.arange(12)
B = A.reshape(3, 4)
A[0] = 42
print(B)
[[42 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]

28
Discovering Diverse Content Through
Random Scribd Documents
on their first evening, in her first evening dress, swished her way in
and out of the dining-tables, very grown-up and shy and
uncomfortable. Mrs. Cloud would not have changed Justin for a
dozen Lauras, and yet, watching her entry, quite alive to the heads
that turned, and the murmur at the nearer tables, she wished she
had a beautiful young daughter of her own of whom to be critically
proud.
“Green’s your colour!” said Mrs. Cloud, as Laura settled herself. No
more—but it was the accolade.
Laura blushed and glanced at Justin.
“Chianti or white wine?” he enquired with some interest.
“No, thank you. Water, please.” (... Men were queer!)
“Oh, if you’d rather!” (... Odd things, women!)
It was the last straw when Art, the Italian jade, plucked at Justin’s
sleeve, whispering that two were company ... and Justin went out to
Pavia all by himself. Mrs. Cloud had a headache. Laura, because she
felt like it, spent her afternoon at the Campo Santo, and, among
tombs, made up her mind to have it out with Justin.
She had a certain desperate directness in emergencies that might
easily have been mistaken for courage. She had quite the average
capacity of a woman for subterfuge, but, linked with it, a curious
dread of being spared in her turn. She could face an ugly truth, but
she could not endure it tailored. She must know where she stood.
She must know where she stood with Justin, risking snubs; though
she dreaded being snubbed as only soft-shelled youth can. She must
know what she done wrong. She was quite sure that, whatever it
was, it was her fault, because if it were not her fault, it would be
Justin’s.... And that was impossible.... She did not pretend to
understand Justin, she knew she was not clever enough for that, but
at least she realized that he had no faults.... She was not quite a
fool.... There were certain inexplicabilities, of course, but they were
not her presumptuous business....
One does not criticize one’s god, or only when one has ceased to
believe in him. But God is not God when one ceases to believe in
Him.
She attacked Justin the next evening, choosing the wrong
moment, when he was tired, ready for a pipe and a book rather than
argument. But he had been kind to her at dinner and she had made
him laugh. (At least she could always make him laugh.) She thought
his mood could not change in half an hour.
But it had changed. He was absorbed, if not somnolent: had not a
glance to spare as she hesitated in front of him.
“Justin? Aren’t you coming out again?”
He shook his head.
She looked out of the window. The moon glimmered in the white
sky, thin and flat and unsubstantial, like a peeled honesty leaf: and,
below, the square was glamorous. The cathedral that rose out of it,
like June woods turned to stone, quivered in the warm dusk as on
the verge of disenchantment. The dots of lamp-light increased like
buttercups all opening at once, and among them people moved in
vague masses. A shrill of voices and laughter floated upwards.
Laura turned to Justin, straining his eyes over Baedeker’s Northern
Italy. The sight of the crowd had stirred her, made her want to go
down into it, just as the sight of the sea makes you want to bathe.
“It’s only half-past eight,” she hazarded.
He read on.
She glanced across at Mrs. Cloud, half asleep at the other end of
the huge deserted hotel sitting-room. They were the only people
indoors on that warm spring night of Italy.
Suddenly she attacked him—
“Justin, you’ll hurt your eyes.” Then, with a curtness that was pure
embarrassment, “Justin, what’s the matter?”
“The matter?” He raised his eyebrows.
“Yes. I want to know.” She hesitated. “Is anything wrong? Have I
done anything you don’t like? What makes you——?”
“What?”
“Oh, I don’t know—so funny to me. So—grumpy.”
“I’m sorry. I didn’t know——” he began stiffly.
She flared out.
“Of course you know. It’s been perfectly awful. You sit on me and
sit on me—and go out by yourself—and fidget at meals when I talk
——”
“I say, don’t wake Mother,” he warned her.
Hastily she dropped an octave.
“So I think you might tell me what’s the matter,” she concluded.
“Oh rot, Laura,” said Justin uncomfortably. “What should be the
matter?”
He waited a moment for her answer; but she said nothing: was
waiting in her turn. He looked at his book.
If he once began reading again....
“I don’t know,” she said hastily, “but there is. You might tell me,
Justin.” She put her hand upon his open book, would not budge as
he tried politely to move it. “You’ve got to tell me,” she insisted.
It was a very young and ignorant thing to do, crudely provocative
if it had not been so utterly unconscious. A woman or an older man
would have laughed and understood and found it charming enough.
But it annoyed Justin. He hated to be bothered. He had a keen
sense of his own dignity. Above all he had a horror of being inveigled
into anything approaching sentimentality. And he was out of touch
with Laura. He had been prepared for a jolly little girl, not for a
young woman with obvious faults and disconcerting garments. He
was just too old to label her challenge ‘cheek,’ yet not old enough to
make allowances for her hobble-de-hoyhood, to differentiate
between impudence and a lack of savoir-faire. Ever since Lucerne he
had been, though he had no idea of analysing his attitude,
disappointed, on the edge of boredom. He was as unaware as she
herself of the beauty of her hand, he merely knew that he didn’t
want a great paw sprawling over his book. He wanted to say “Get
out!” And she stood there and waited!
He leaned back in his chair with elaborate indifference.
“Justin?”
She was actually smiling at him—pleased, he supposed, with the
success of her idiotic performance.
“I don’t know that it’s anything much,” he was impelled to begin.
“It doesn’t matter anyway. It’s only——” He broke off.
“Tell me,” she insisted. And again he disliked her tone. Who was
she to order him about? Oh, well, if she wanted it she should have
it....
“You’re rather different from what I expected.” He stopped. It was
not perfectly easy, annoyed as he was.
“How?”
“Oh, I don’t know.”
“How?” She had a touch of colour in her cheek. Her bright eyes
compelled him.
“You’re—rather French, you know. You don’t seem quite—natural.”
“How?”
“Well, your clothes——”
Her face fell.
“Oh, Justin, don’t you like them?”
“They’re rather bright.”
“Oh!”
He did not volunteer anything.
“What else, Justin?”
“Oh, how do I know?” He was impatient. “It’s not my business.
But I hate scent and chatter and high heels and things that jingle.
And you come down to dinner with your hair fussed out like an
actress. But it’s all right, I expect.”
“I see.” She managed to smile at him before she swished across to
the window, with the little un-English swing of her body that was
another of her ways that vaguely irritated him. He made an
impatient movement. Of course he didn’t want to hurt her feelings,
but why on earth did she worry him?
“I only mean——You wouldn’t see Mother——Every one looks at
you!” And then, “I’m sorry, Laura, but you made me say what I
think.”
“Of course. I’m glad. I’m glad to know what you think.”
Her voice grew higher and higher as she tried to over-top the
catch in it. He had put a match to her quick young pride, and it
blazed and raged within her till she was quite sick with the physical
pain of it. The intolerable, humiliating tears rose under her lids.
Always with her back to him she took her handkerchief, screwed it to
a point, and removed them with precise care. She could not quite
control them, the square danced mistily, but at least she would not
show a stained face. Head up before everything!
‘Not natural,’ ‘like an actress.’... Oh, it wasn’t fair of Justin ...
wasn’t fair not to give her time to get used to him again.... He’d
been grown-up so much longer, but didn’t he remember what it felt
like to be shy and awkward and uncertain?... How could one cover it
up but by being glib?... At Paris they liked her.... Mrs. Cloud liked
her.... Mrs. Cloud had liked her green dress.... She didn’t know what
he meant.... It wasn’t vanity, everybody waved their hair.... She
couldn’t help her voice being loud.... She had never realized that she
was so full of faults.... She had only wanted to make herself nice—
and now it was all wrong.... And after looking forward so to Italy....
Not that she cared ... not that she cared a hang!...
“Don’t worry, Laura!” Justin was stirred by a vague compunction,
though he wished that she did not find it necessary to stand
between him and the last of the light. “What does it matter? I told
you—it’s nothing to do with me.”
She whirled round indignantly, all eyes and flame.
“Whom else has it got to do with but you and Mrs. Cloud and
Gran’papa? If you feel that way I’ve got to alter things. It’s dreadful!
It’s dreadful that you don’t like me any more.”
He was obliged to smile at that—a smile that lit up his face as
sunshine brightens a room: and suddenly, for the first time since
their meeting, he was at home with her again. The simplicity of her
passionate distress was so familiar, so entirely the Laura he had
missed, that the two alienating years were blotted out, as the
darkness was blotting out Laura’s skirts and offending airs and
graces, leaving him his foundling again in one of her tragi-comic
rages, his rum old Laura, raw from conflict with life and Aunt Adela.
She must be smoothed down!... She must be smoothed down at
once!...
“Here, dry up, Laura,” he advised her, “and don’t talk so much.
You’re right, it’s getting too dark to read. Come on out with me and
eat spaghetti on the pavement. They say that’s the thing to do when
there’s a moon.”
For an open-mouthed moment she stared at him: then, with a
comprehension of his change of attitude that was uncanny,
controlled herself, controlled her choking need of a good cry, nodded
cheerfully, and ran upstairs for her hat, her old straw hat at the
bottom of her trunk that she had not meant to wear in Italy.
It was going to be all right.... He was going to understand.... He
was going to be himself again ... if she only kept quiet and wore her
old clothes.... Oh, all ye works of the Lord, bless ye the Lord!... She
dashed downstairs.
It was a cloudless night. The macaroni was delicious. The clang of
the trams was like Eastern music. Laura was quiet and sweet. Justin
found that he was enjoying himself, and was moved to tell all about
his tour around the world, and she was deeply interested and asked
extraordinarily intelligent questions, and there was no shadow upon
them any more, save the shadow of the great cathedral, black and
white and wonderful under the moon.
It was late when they came back to an amused, forsaken Mrs.
Cloud, and were eloquent for half an hour upon moonlight and
macaroni and Milan.
And Justin said good-night to Laura and shook hands with her
properly instead of grunting off to bed as he generally did. He said
she was to sleep well. She said she would.
Yet the dawn a few hours later, nosing damply in between
venetian blinds, surprised Laura, with wet brushes and a determined
mouth, still hard at work before her looking-glass, brushing,
brushing, brushing the vanity out of her splendid hair.
CHAPTER XIV

Man generalizes, woman defines.


Woman—she will nurse Tom through small-pox, flirt outrageously
with Dick, and sell her soul for Harry and enjoy doing it; but refer to
them, Tom, Dick and Harry, with collective benevolence as
‘humanity,’ and she yawns. She is not an altruist. She does not love
in the lump. She lives her seventy odd years for the sake of—how
many people? There would be a question for her fellow-man! If he
whittle down the tally of his dear folk, his allies, his indispensables,
just at which notch will his knife blunt, will his hand shake and
refuse service? How many loves could he deny to save—how many?
But you cannot imagine woman discomposed by such a problem.
He and she sit over the fire she has built, and she listens with
breathless interest to his schemes for the betterment of the world,
while the rest of its inhabitants drift in and out of her indifferent ken
like the snow-flakes’ indistinguishable millions drifting past her
window-panes. Yet this indifference is less selfishness than an
armour assumed. Like any hermit crab she must borrow a shell for
her excursions because she knows herself a soft-bodied creature,
impressed so easily by all the other people of the world who, she
asserts passionately, never can or shall impress her. She is,
nevertheless, vaguely enlightened when she returns, changed a little
in spite of herself, her armour dinted, taught at least where it was
weakest, if her fellow-man acclaim the improvement. Then there
was, after all, she supposes, if she be eighteen and Laura, some use
in all those other people who did not interest her ... educational....
That, looking back might have been the use and excuse for Oliver
Seton. He had certainly taught her a lesson or two for which she had
been anything but grateful at the time. A stupid man.... She could
still go pink, years later, when she thought, as she seldom did, of
him and his stupidity. Poor Oliver!
From the first she was prejudiced against him. The travelling
companions had been in Florence ten soft blue days, and Florence,
with her palaces and wistaria and agate-coloured river, welcomed
them, was kind, almost as kind as Mrs. Cloud, whose thrice-blessed
headaches came on regularly every other day or so at nine in the
morning, and were always over by tea-time. You might almost
imagine that Florence and Mrs. Cloud, those two beautiful old
women, had talked things over.
“Delighted, my dear! Just you leave them to me. You’ll stay at
home, of course?”
“I suppose I’d better——”
“Young folk, my dear!”
“Oh, I do so like to hear them talking,” says Mrs. Cloud wistfully.
“So do I—always did. I remember listening, just such a spring as
this it was—the almonds blossomed early—and—‘Sandro,’ she says,
like a bird—‘Sandro!’ and throws a tulip to him over the garden wall.
You know my little wild tulips?”
Mrs. Cloud knows them.
“Dear, dear, how it brings things back! But I shut all my eyes. Two
was company even then. Why, you yourself, only yesterday——”
Mrs. Cloud has such a pretty laugh.
“He brought you an armful of those very same tulips—my tulips.
Do you remember?”
“I remember——” says Mrs. Cloud.
Justin and Laura, of course, were no match for those conspirators,
Florence and Mrs. Cloud and Mrs. Cloud’s headaches; though Justin
was all anxiety and eau-de-cologne, and Laura was sure she ought
to stay at home as nurse. It appeared, however, that what Mrs.
Cloud needed was Absolute Quiet—and I am afraid that when the
novelty wore off Absolute Quiet was her portion, for Florence more
than kept her promises, and, as Justin said, he didn’t want his
mother to overtire herself. Of course it was the travelling—because
she never used to have these headaches.
Dear Mrs. Cloud! If ever there were a woman without guile——
And yet, you know, I cannot quite believe in Mrs. Cloud’s headaches.
But Justin and Laura believed in them implicitly, and brought her
back menthol and aspirin from the English chemist’s, and, that she
might know what they had been doing, all the fat little catalogues
that Justin carried, as it were card-cases, when he paid his calls
upon Florence.
For Justin was never happy without a catalogue. It annoyed him
sometimes that Laura had such a trick of pronouncing upon pictures
without looking at the labels first. She had stood him out once that
Sandro’s Simonetta was nevertheless by some one else—who it was
she did not care, and she never remembered names. He looked it up
and proved her wrong, and then, you know, she turned out to be
right after all—one of those unsettling footnotes. “Then why have it
labelled ‘Botticelli’?” he demanded, and Laura laughed. What did it
matter as long as the picture were there? But it worried Justin. He
liked things done decently and in order. Laura’s irreverences upset
him. And yet, one morning, when Mrs. Cloud’s headache was more
genuine than usual and Laura did stay behind, he found Florence
dull, as dull as the world when he had travelled round it. He came
home to lunch inclined to think that they might as well be moving on
—what about Verona? It took an afternoon’s prowl in back streets,
two arguments with Laura, and a sixteenth-century cabinet, an
absolute find—dirt cheap—the very thing for his eggs—completely to
restore him.
But you can understand, if you are ever to understand Laura at
all, how deliriously beneath her sedateness she was enjoying
herself: can guess at her dismay when Justin addressed her one
morning—
“I say! ’member Oliver?”
“Oliver? Oliver?” She frowned uncertainly. The name was as
familiar as the pink clouds of almond blossom in the courtyard
below, that reminded her every day of the tree under Justin’s
window-seat. You could reach out and pull in a twig to sniff as you
read Justin’s books ... the Rackhams—the Arabian Nights. Oh, of
course....
“You mean to say you don’t remember Oliver?” Justin was opening
his eyes widely at her over the letter he was reading. He always
opened his eyes where most people would lift an eyebrow, which
gave his simplest question an air of reproachful surprise that put you
quite unnecessarily on the defensive. If you didn’t know the answer
you felt guilty. But Laura was able to run back across the years to
Justin with a laugh.
“Does he—is he the one that will call you Camaralzaman?”
Justin laughed too.
“Rum kid you were. Yes. He always enquires after the harem. He
won’t know you again.”
Laura’s eyebrows were under no disabilities.
“Oh, because he’s here,” he answered them. “This letter’s been
trotting after me for weeks. Wish I’d known. We might have been
bummelling about together all this time,” he concluded regretfully.
“So we might!” Her tone matched his to a nicety.
“We must look him up first thing. Mother, you’ve got to come. You
remember Oliver? It’s funny we’ve not run into him. He’s copying at
the Uffizi.”
“Oh! He paints!” Laura ruffled up into the comically aggressive
interest that an artist or a gamecock or a pretty woman will always
display when a fellow professional is mentioned. “Is he any good?”
“‘Is he any good!’” Justin ruffled in his turn. He was always easily
moved on behalf of his dearest friend of the hour and he had your
plain man’s instinctive and unbounded admiration for the creative
gift. He had also his naïve conviction that its obverse, the critical
faculty, must nevertheless be in himself. “Of course, I don’t pretend
to know anything about painting,” Justin would prepare you, “but I
know what I like, you know!” But thus guided he was certainly safer
than most, for he had an enviable habit of liking the right things. It
was as if he proved all art with the touchstone of his own
unconscious honesty. Now Laura could not help persuading herself
to like what Justin liked because Justin liked it. She had resigned
herself to admiring Oliver, though she was sure that she never
should, before Justin had finished his eulogy.
“Whom is he under?” she demanded.
“Oh, he’s on his own now, of course. I tell you he’s a big pot. He
was at the Slade though, I believe.”
“Oh? Oh, I knew some Slade people in Paris.” And then, because
she could not help it—“Their paint’s awfully muddy.”
Justin was deep in his letter again, but he came to the surface for
a moment to say paternally—
“Oh, of course! You sketch yourself a bit, don’t you? You must get
him to give you some tips.”
And she with a letter in her pocket at that moment, a cordial
letter, an almost anxiously enquiring letter, from Monsieur La Motte!
But naturally, or, if you were a man, oddly enough, it was not Justin
but Oliver Seton whom she wanted to shake.
“Is he really nice? Did you like him?” she asked Mrs. Cloud when
Justin had left the room. He never sat out other people’s breakfast.
Mrs. Cloud wore her quaintly unhappy look. She disliked
discussing any one whom she could not whole-heartedly praise. But
Laura had a way of dragging Mrs. Cloud’s opinions out of her that
Mrs. Cloud, always resisting, nevertheless enjoyed almost as much
as she enjoyed her son’s invariable assumption that they must be
the same as his own.
“He’s a very clever young man. And we must be pleasant to him,
Laura, for Justin’s sake.”
“Ah, I thought you didn’t,” said Laura, with satisfaction. “Now what
exactly is it—conceit?”
But Mrs. Cloud said that Laura must finish her coffee, because the
poor waiter was obviously wanting to clear away.
Now it must be confessed that if Mrs. Cloud and Laura shared a
prejudice against that rising young artist, Oliver Weathersby Seton,
the fault was as little theirs as his. Mrs. Cloud could have forgiven
the inconsequence of his manner (she was not to know that he was
‘Weathercock Seton’ to his intimates), and Laura would have
admitted that her memory of a long boy who laughed at her and
talked with his hands was pleasant enough, if Justin, in the
openness of his heart, had not held forth quite so energetically upon
his temperamental friend. Oliver was so brilliant, so impulsive, so
affectionate, the quaintest of companions, the jolliest of merry-
andrews! Justin could not help admiring a character so different
from his own in pace if not in quality: and the more he dwelt upon
it, the more deeply interested in his own admiration he grew, until
he worked himself up in the course of the morning from a moderate
sense of friendship to a state of enthusiasm as gratifying to himself
—for his temperate nature enjoyed a rousing—as it was depressing
to his womenfolk. There is no doubt that excessive praise of other
people is hard to bear.
There was time enough, however, while they lost themselves and
each other in the honeycomb of the Uffizi, and met again
unexpectedly as they hunted down Oliver, for Laura to be firm with
herself, to scout this ridiculous notion of sticking up her chin at him.
Mrs. Cloud was right.... Of course she must make herself perfectly
charming to Justin’s friend ... because, though she was certain to
disapprove of him, it was absolutely necessary that he should
approve of her.... Suppose he didn’t like her ... said sneery things
about her to Justin!... Justin was so easily influenced.... Was he? She
pulled herself up short. Was he? She had never thought of that
before. Yet here she was taking it for granted!... And it was perfectly
true.... He was as hard as nails ... you could not persuade him to
anything face to face ... but you could drop a notion into his ear, and
in a week it would leaven the lump of him.... She knew it. She had
always known it. She wondered how she knew?
She trailed out of that room (she had lost the Clouds again) to find
herself in a long remote corridor that she had not seen before. In a
corner to her right a man stood and painted.
Was this Oliver? She could not see his face, but she thought it
probable. He was young, and though his clothes were Latin Quarter
French, he wore them like an Englishman, an Englishman pretending
that he was not in fancy dress.
She drew nearer. She was herself too hardened to an audience to
be chary of watching him, but she was amused and faintly
contemptuous when she saw how instantly he was embarrassed. He
had been absorbed in his work, his good work, as she critically
admitted. Justin was right—the man could paint. She had never seen
a better copy, unless, indeed, it had too vigorous a life of its own.
She sympathized. This was no commission. She guessed him a
penitent, at her own trick of subduing the artistic flesh. She
observed that he had pet brushes. If this were Oliver, she might like
him after all....
And then, as I told you, he became aware of her, and began, like
any child, to show off. He did not turn: he remained elaborately
unconscious; but he intensified himself. She could not help laughing.
The breathless pause, the poised brush, the accurate dab, the hasty
retreat and long absorbed stare, the frantic rattle through his paint-
box for the unnecessary tube, it was all familiar comedy: she had
played it herself in her first nervous week at the Louvre. But he, at
twenty-five—if he were Oliver he must be quite twenty-five—could
not possibly be nervous any more.... It was pose, pure pose, very
funny to watch.... So that was Oliver! She shrugged her shoulders
and strolled on.
She would, perhaps, have had her expressive mouth more under
control had she realized that a dark canvas and a sheet of glass are
an excellent substitute for a mirror.
She glanced at her watch. She and Justin had their established
rendezvous, but it was early yet. If this were Oliver, Justin and his
mother would find him sooner or later.... It would have saved time if
Oliver had had the sense to say what he was copying.... Justin, with
an indulgent smile, had said that the omission was just like Oliver
—“Head in the clouds as usual. You know what these geniuses are.”
Genius!... What would Justin have said if any one else had sent
them trapesing up and down these endless rooms? She, Laura, did
not mind for herself, of course, but poor Mrs. Cloud would be done
up.... Even she was not sorry to rest for a moment....
She sat down thankfully on a student’s deserted stool. It was a
warm, lax day and she was, in truth, a little dazed and overborne by
the bright colours and echoing rooms and the familiar, indescribable
odour that is the breath of painted pictures, crowded hundreds of
pictures, hundreds of years old. She had only to shut her eyes to be
in Paris ... in her painting apron....
She shut them.
She did not actually drowse. She was aware of the discomfort of
her hard seat, of herself perched stiffly upon it, and of the eternal,
far-away confusion of footsteps that ticked and tapped and clattered
as if the great building were the home of all the timepieces in the
world; but she was indifferent, bound by that pleasant, trancelike
numbness that will overtake you sometimes in church, or in the
corner seat of an express. Not an inch of her wanted to stir again:
she would murder any one who disturbed her in the next hundred
years, if murder were not so energetic a business. Her mind dwelt
with infinite contentment on a memory it had preserved of a donor’s
robe that had caught her eye, shining out of some dreary acre of
canvas like a geranium in a slum window. The colour made her purr
as she thought of it. The sun, who never waited for the blinds’-man
to finish his lunch, had arrived at the unprotected window behind
her, and was kissing the back of her neck. She was as contented as
a cat, and it was unforgivable of some one, some brawler at the
other end of the world, to knock over a paint-box and scrape back a
stool and come tearing past her like a wind, shouting—
“Here! Hi! Here, I say! Cloud! Justin, old man! Well now, isn’t this
jolly?”
She opened her eyes and rubbed them crossly, as a child does
when you rouse it too suddenly from sleep. What was the fuss now?
Oh, there were the Clouds at last ... and the man—her eyes sulked
up the room to where the painter had been standing—then the man
was Oliver....
What an unnecessary noise he was making!... And that was the
third time he had shaken hands with Justin ... both hands.... So
affected.... His hair was too thin to wear fluffed out, just like all the
little students.... Now he was shaking hands again!... She wondered
that Justin stood it. But Justin was looking so pleased....
She did not go up to them. She sat still on her stool and watched
with a disapproval that grew like a beanstalk. He, Oliver, was
handsome, she supposed, if you admired the type that cried out for
gold ear-rings and a razor.... She didn’t.... The man wasn’t still a
moment.... He talked with his whole body.... She could hear scraps:
“My dearest fellow——Well, I was going on, but now you’ve come
——Piece of luck——Tell you what old man——Oh, my dear soul——”
One of these Italianate, epithetical people.... She knew she shouldn’t
get on with him.... She wondered how much longer Justin would be
content to stand there, beaming and button-holed.
And then Mrs. Cloud caught sight of her, and this Oliver person
had given her a quick amused look and said something to Justin as
they all moved up the gallery towards her and she came down to
them.
There were introductions. Oliver gave her the prolonged and
peculiarly earnest handshake which implied that his whole eager
nature leaped to welcome the friend of his friend, and turning back
to Justin instantly forgot all about her. He exhibited his copy to
them, and told them how good it was, and what a great many
people whom they did not know had said about it. His vanity was so
fresh and real, so unadulterated by false modesty, that Laura should
have humoured him. But she was too young, I suppose, to find it
charming. It is curious how intolerant youth always remains of that
youthfullest of sins. She listened, however, with merciless attention,
as he talked them out of the gallery and down the staircase and
along the street to a restaurant. When they all sat down together to
lunch he was still talking, and Mrs. Cloud had said but half-a-dozen
words and Laura not one.
It was not until the meal was nearly over that he became aware,
with the uncanny sensitiveness of the egoist, that his circle was
incomplete, that some one, somewhere, was not fully appreciating
him. It could not be Mrs. Cloud ... because he openly adored Mrs.
Cloud, and had always been grievous that she would not let him
paint her.... (How should he dream, when admiringly he had tried to
tease her into consent, that the pretty faint colour in her cheek was
not a flush of pleasure, that Mrs. Cloud was one of those rare
women who honestly believe themselves to be plain.) He did not
quite understand her, he admitted; but he knew he was a favourite,
because she always welcomed him so kindly.... It could not be Mrs.
Cloud who was obstructing him.... Remained the girl with the red
hair, and, as she lifted them, the eyes....
At once he turned to her with that intimate abruptness, that
serene assumption of her interest in him that was, Laura began to
understand, his chief charm for Justin, who always needed helping
over his preliminaries. Justin, she observed through her lashes,
waited, smiling, for her answer, sure that she, too, must be finding
this Oliver irresistible. It would certainly have soothed her to realize
that he was anticipating with equal satisfaction her own effect upon
Oliver; but she never dreamed that he was proud of her. How should
she, when he did not know it himself? Yet he must have been, for he
found himself distinctly irritated when he heard Laura tell Oliver that
she thought Florence was very nice. He felt that she was not doing
herself justice.
“Nice!!” Oliver rose like a trout to that fly.
“Don’t you?” Laura looked surprised.
He drew eloquent breath.
“‘Nice!’ Dear lady, we’re speaking of Florence—Buondelmonte’s
Florence—Dante’s Florence—Fiorenza, dentro dalla cerchia antica
——Don’t you realize? They walked and talked out in that square.
From where we sit we can see Savonarola burn. This isn’t a town.
It’s Florence, watering her flowers with heart’s blood these thousand
years.”
“That’s right, old man,” Justin encouraged him.
“But it’s a nice place now, don’t you think?” said Laura.
Mrs. Cloud drank some coffee hurriedly.
“And I never dreamed the shops would be so good. Ripping hats!”
Laura’s candid eyes assured Oliver how pleased she was to join with
him in praising Florence.
But Justin protested: he felt that Laura was being unusual. He had
never seen her in such mood before, and he didn’t like it.
“Laura, you’ve not been in once since we came!”
“Oh, but I’ve wanted to.” She answered him with the smile and
the look that was his due: and then, “There’s a hat in that street
where we got the cabinet—with thistles on it—a dream——”
The change of tone as she spoke to him was too subtle for Justin’s
ear; but Oliver looked across at her with sudden curiosity.
“Why—why——” he began.
“Florence even provides for donkeys, doesn’t she, Mr. Seton?”
Laura nodded to him with the ingenuous air that he was beginning
to suspect. But Justin interrupted.
“I think,” he meditated paternally, “it’s rather rot for you to go
mistering Oliver. He knew you when you were a kid—isn’t it,
Mother?” He turned to Mrs. Cloud and so missed Laura’s frown.
But Oliver was quicker.
“I say, Justin!” he exclaimed, “she doesn’t want to. She doesn’t
like me. Quick! Look at her! Did you ever see anything so hostile?”
Justin turned to the inspection. And Laura, naturally, grew scarlet.
She was furious. It was so perfectly true.... She couldn’t bear the
man.... A type she detested.... A caricature of herself.... But if she
didn’t like him, it was no business of his to find it out.... It was cheek
to challenge her in that way ... to make her look a fool.... She
wouldn’t stand it....
Here Oliver, watching her delightedly, fanned the flame.
“There—the colour—d’you see? Now isn’t that interesting?
Because everybody likes me, don’t they, Justin? don’t they, Mrs.
Cloud? And now, I remember, you sniffed at my stuff this morning. I
saw you in the glass. Now why, Miss Valentine, now why?”
“Oh, what nonsense!” That, of course, is what she should have
said. That, she knew perfectly well, is what she should have said.
But the politenesses had gone from her. She answered like the
furious child she was.
“You pose,” said Miss Valentine.
“I swear I don’t!” Oliver sat up.
“I say, Laura!” Justin warned her.
“He does, Justin. I watched him before you came. Oh, you know
you do.” She faced Oliver accusingly. “You were varnishing: you
didn’t want all that gamboge. Now, did you?”
Suddenly Oliver, who was sweet-tempered, began to laugh guiltily.
“I believe she’s right! Justin—I believe she’s right!”
“Yes—and knocking over your easel to look excited, and—” she
thought she might as well be hung for a sheep as for a lamb—“and
shaking hands four times running and saying to me that I didn’t like
you—like that. When you’re a little boy it’s being enfant terrible and
funny, but when you’re grown-up it’s just pose.”
“Now, look here—Laura!” Oliver planted his elbows squarely on
the table.
“Yes—Oliver!” She met his twinkling eyes stubbornly.
“If you please, what did you call Florence just now?”
“It is a very nice place,” she defended herself. There might or
might not have been a dimpling of the austere lines of her mouth.
“And you talked about hat-shops.”
The dimple was unmistakable. There were even signs of a second
one.
“You know what I’m driving at?” he insisted.
“Oh, yes,” said Laura.
“Well, then—wasn’t it?”
“Wasn’t it what?” said Justin.
She looked from one to another.
“Pose!” said Laura as meekly as you please.
CHAPTER XV

I wonder, Collaborator, if you are out of humour with Laura? She


has been, in the last chapter, a trifle—how shall we say?—touchy—
ungracious—narrow-hearted? has shown herself a supercilious chit?
If you thought so, there was one person at least in entire and
most penitent agreement with you. Laura, at the evening ceremonial
her mother had taught her, that she had never foregone—Laura,
with her Bible and her good little books, holding her day in review,
had already used every adjective that you offer me, over and over
again, in a bewilderment at her own curmudgeonry that I, for one,
find a little laughable and still more pathetic. She had her standards
of conduct set up like ninepins, and when her adolescence knocked
them over, who so puzzled as Laura?
She read at random—
A continual dropping on a very rainy day and a contentious
woman are alike.
“Ah!” thought Laura, heavily.
A gracious woman retaineth honour ... like Mrs. Cloud ... grave
and sweet, even when she didn’t like the Seton man a bit.... Now
why couldn’t she, Laura, have behaved beautifully like that ...
instead of saying what she thought?... Yet wasn’t it hypocritical not
to say what one thought? What a muddle it was!... But she was sure
she had been wrong, simply because she felt it in her bones. When
the moralities failed her she always trusted to her bones. Ah, well,
she must make up for it tomorrow!... She could always make people
like her if she tried ... and Mr. Seton had really been quite decent....
He might have taken offence, and then Justin would have been
furious.... There was no reason but a Dr. Fell reason for disliking
Oliver Seton, was there? Or was there?... She went to sleep
unsatisfied.
Yet, had she read on a page or two, she would have found her
answer, the answer written for her three thousand years ago—
Who is able to stand before jealousy?
If Solomon could not, with all his experience, isn’t there some
slight excuse for Laura Valentine?
But she was a good girl in the days that followed and a baffling
one to Oliver Seton, who had delightedly foreseen squally weather.
He enjoyed quarrelling with a pretty woman. But he soon agreed to
agree with a dove-like Laura, and so well that Justin was gratified.
For it had seemed to Justin, till she and Oliver between them
disturbed him, that Laura was already greatly improved. His idea of
a woman, in those dogmatical days, was the ideal of Mr. Edmund
Sparkler, and Laura, since the evening in Milan that appeared
already far away, was daily more completely fulfilling it. If she had
been his favourite armchair, at arm’s length from his bookshelves
and the back to the light, she could not have suited him better. And,
appreciating her, he was pleased that his friend should appreciate
her also, and she his friend. He had been worried by their first
inimical encounter. Oliver he knew for a weathercock; but Laura’s
opinions, negligible as he felt them to be, had always their effect on
him: had, until he accounted for them, a singular and uneasy effect
upon him, as of undigested apples. That Laura, with no nonsense
about her, had seen fit to withdraw her objections, was a real if
unrealized relief. That Laura, chattering nineteen to Oliver’s dozen,
with that ardent and enthusiastic young gentleman securely
attached to her painting-apron strings, should like him in her own
private heart no whit the better, simply could not occur to him.
But then there was so much that did not occur to Justin. There is
an incident in the lives of those two friends of his of which he never
dreamed; though it took place in the very shadow of his Roman
nose; though it rankled a long while, quite three months, in Oliver’s
mind and to Laura was a memory that could still make her ears burn
when her blushet days had grown as thin and unreal to her as the
pressed flowers in her Prayer Book on Sundays.
For Oliver, inevitably, as Justin ought to have known he must, fell
in love with Laura. They were always together. There is no doubt
that even in winter his emotions were easy, and here was spring
herself waking daily in Florence to wantoner life. He could not help
feeling poetical when the sun and the bees, and now and then a
butterfly, strayed in at the open doors of the galleries and the
churches and the monasteries where he and Justin attended to the
education of untravelled Laura—Justin olympically, Oliver with a
growing conviction that she could, if she chose, have taught them
both. She was diffident—Oliver wondered why—but she could be
surprised into illuminating criticism, especially when Justin was out
of earshot, and Oliver, in this spring mood of his and as
impressionable as only the sea or an artist can be, was quickly
aware that she was good for him. Justin’s tendency was to classify,
to lock doors, to enclose; but she must be ever querying, opening,
opening up avenues. She scattered questions like corn while they
were garnering their conclusions, and Oliver was amazed to find how
constantly those questions took root in him, sprouted into new
thoughts, fresh, sturdy, blossom-bearing. In short, she stimulated
him: set his fingers itching for his brushes. He always worked better
when he had a woman in his head.
He planned a picture of her. He was an impetuous person, and he
discovered in her profile and her fine meek lips a resemblance to
some perfectly amazing portrait of some absolutely superb woman
by that man who knocked every other Florentine into a cocked hat—
what’s his name?—Ghirlandaio. He was quite sure it was Ghirlandaio:
remembered the picture: remembered its exact position on the left-
hand wall of——Lord! didn’t Justin remember? They spent a questing
week scouring Florence for the Ghirlandaio before Oliver
remembered that it wasn’t a Ghirlandaio at all, but a Botticelli (it was
a Botticelli year for Oliver) and that it wasn’t in Florence either, but
in London.
“A background, my dear chap! a background—divine! My word,
what a blue! Like Shelley’s blue dome! Like Bellini’s doge—the
background, not the doge, you chump! Never seen it? My God, and
you live an hour from London!”
And then he had raked down Brogi’s for a copy and brought it to
them in triumph.
“I told you so! There you are! No, they’d only got a postcard. But
if you imagine the colour” (followed the blue doge), “it’s the image.
I’ve simply got to paint her. My word, what a blind bat you are!”
But Justin sat and enjoyed him non-committally, as you see a
sleepy tom enjoying the permitted onslaughts of a terrier pup.
“Can’t you see it?” Oliver worried at him. He could not be
contented by acquiescence. He wanted enthusiasm. “The twin—the
absolute twin! It only wants a slight wave in her hair”—(Laura
glanced sidelong at Justin) “to be a photograph!”
Justin, goaded into interest, stretched out a hand for the
photograph, examined and returned it.
“Don’t see the faintest resemblance,” he pronounced.
Oliver’s gesture implied that he would have torn his hair if he
could have afforded it.
“Do you?” said Justin to his Echo.
“No!” said Echo, through her nose, with a clear, contemptuous
little laugh that nettled Oliver.
But he didn’t guess how disappointed Echo was. Echo would have
been gratified if Justin had perceived that undoubtedly existing
resemblance. As it was, she was merely annoyed with Oliver for
making the discovery. If Justin didn’t admire Laura’s hair, it was
certainly not Oliver’s business to do so.... She didn’t like Oliver.... A
wordy man....
But she was obliged to let him paint her. She had begun by being
deaf to his persuasions, for she knew what sitting meant: she had
always been the sacrifice of her merciless mates in the Rue Honorine
when the model had fainted or left them in the lurch. But when
Oliver appealed to Justin, and Justin opened his eyes at her, what
was she to do?
Sit? Of course she must sit! It would be rather a lark. They were
in for a spell of rain and he was sick of churches. He always enjoyed
watching Oliver work, and besides, Oliver was so awfully keen to
paint her. He thought she ought to be flattered. He would sit himself,
like a shot, if his mug were any use to Oliver.
And so she sat for them, in Oliver’s big cool studio that had been a
palace pleasure-room once upon a time. The rest of the building,
even its name, had vanished out of memory, but this one room still
stood, fair and lofty as Marina in the bagnio, amid the vile modern
cubbies clustering against its three walls like barnacles upon a shell.
The fourth was all windows and a great glass door that opened upon
gardens. Its lintel was upheld by columns of pinkish stone, that
writhed up in foliated spirals to a crazy capital of fruits and rams’
horns and ribands. In the summer, said Oliver, the vine outside came
clambering in to put its tendrils and carved grapes to shame. The
whitewashed walls were brilliant with Oliver’s canvases, but on the
ceiling there were the flakes and peelings of a fresco, still witnessing
that it had once been lovely, as a skeleton leaf cries out to you that
once it was green. Laura, perched on her throne, would try to
decipher the dim outlines, till Oliver called to her not to pucker her
face: and then she would start and lose her pose and twinkle across
at Justin, while Oliver swore like a cat in Italian and apologized
mellifluously in English and arranged her again to suit his difficult
taste. I am afraid she was not a good sitter. She was still enough,
but Oliver complained that she would not look at him. He was
certainly worth looking at, as he sat in the open doorway, his dark
face darker against the light, and the overladen, fantastic column
rising beside him. They had an odd air of belonging to the same
century. Justin, indeed, had once declared that Oliver looked like an
undissipated Medici; which did not quite please Oliver. He was young
enough to deprecate the adjective. But despite his wild hair and
dynamic neckerchiefs and all the other inevitable little affectations of
his temperament and his trade, his good looks were undeniable, and
it is possible that he did not often find his sitters unappreciative. But
always Laura’s eyes went through him and over him and beyond him
to the loggia where Justin lounged or read aloud to them in his shy
precise sing-song, while the smoke of his smouldering pipe whorled
upwards, to melt into the fine silvery rain that eddied past like
ghosts of old Florence, or to the corner where Justin raked his way
through Oliver’s stacked canvases and grunted out comments that
set Oliver ablaze. And then Laura must jump down to see what it
was all about and give her opinion, though Oliver took no notice of
it, which nettled her, little as she liked him: and business would be
delayed. Mrs. Cloud would come in with a basket and a Murillo’s
melon-boy to carry it, and they would all picnic together on the
throne. And afterwards, if the sun had come out, Justin would carry
them off for a drive and no more painting would be done that day.
Nevertheless the picture progressed apace. Mrs. Cloud thought it
very pretty and Justin was enthusiastic, though not sufficiently
enthusiastic for Oliver, for nobody’s praise seemed to Oliver to do his
work quite such discriminating justice as his own. Even Laura would
have owned to a real admiration if Oliver had asked her. But Oliver
did not ask her. Laura had protected Justin only too well. He had
explained to Oliver in all good faith how well she sketched—oh,
water-colour, he supposed, he didn’t really know—and Oliver, with all
the water-colours of all the daughters and drawing-rooms of England
in his mind’s eye, thought himself wise in evading the subject. His
Hebe should not trip if he could help it. Naturally Laura observed his
manœuvres. If she had had more faith in herself she would have
been amused by them; as it was, she was humanly annoyed. She
might have made up her mind to forgo her painting: she half
believed she had; but it was another thing to be ignored, to sit a
week watching some one else handling and mishandling the tools of
your trade. Because, whatever conceit Oliver might have of himself,
he could not draw. She could see all he did reflected in the mirror
beside him and—he could not draw. She conceded him colour, an
amazing colour; but he had no sense of discipline, of line ... and,
shades of Ingres! how he was mangling the shoulder curve!
However—this with a twist of her lip—she supposed he would cover
it up nicely with drapery.
“Smile, please,” directed Oliver. And then, “Sweeter, my dear girl,
sweeter. No, I don’t want your teeth.”
“Oh, I can’t sit any more,” said Laura suddenly, and she jumped
down in spite of his outcries. “Aren’t you nearly done?”
“Pretty well.” Oliver stepped back. “Like it?” he enquired politely;
but he went off to unpack the luncheon basket without waiting for
her answer.
Justin came up and looked over her shoulder. The canvas showed
an arrangement of sunshine and white flesh and red hair, with no
more than a conventional resemblance to Laura, but delicate and
lovely as a bunch of shaded nasturtiums.
“Don’t you like it?” he asked.
She chose her words.
“It’s wonderful colour: like a fire-opal.”
He nodded quickly. She always found the words he wanted.
“That’s why I’ve bought it—at least, I’m going to—for Mother. Just
the thing for the yellow parlour, isn’t it?”
“Oh, yes.” She was pleased, tremendously pleased, that she was
to live in Mrs. Cloud’s drawing-room. If they hung her over the
mantelpiece they would see her every evening as they sat by the
fire.... She thought—not because it was she herself, of course, but
because it was such a good piece of work—that it ought to go over
the mantelpiece....
“Wouldn’t you give your ears to draw like that?” There was a
wistfulness in Justin’s voice that should have touched her. He was
thinking of himself, not of her.
But she, too, was thinking of herself.
“I can,” said Laura absently. And then, as he laughed—“I tell you I
can, Justin! I tell you I can!”
“Can what?” Oliver came across to them with his hands full of fruit
and green glasses and blue checked table-cloth, and sat himself
down to butter rolls.
“Draw,” said Laura stiffly, her eyes on the fire-opal shoulder blade.
“Can you?” said Oliver in the soothing, interested voice that one
uses to a child.
“Well, you may laugh,” she began, but ready to laugh herself, if
Justin, with a vague notion that she was making herself look foolish
and a still vaguer notion that he did not like Laura to look foolish,
had not interposed too peremptorily——
“Oh, dry up, Laura! Let’s have lunch,” and so set a match to her
discretion.
She flared. It was comical to hear the personal pique and
righteous artistic wrath struggling for precedence in her harangue as
she dragged out Oliver’s spare easel.
“You eat your lunches! Oliver, where’s the michallet? And
charcoal? And a board? You two think you know everything. You
think I’m a fool. You think there’s nothing on earth but colour. Oh, I’ll
show you!” And then, as the familiar delight of handling familiar
tools swept over her, she suddenly added, with complete if
abstracted friendliness, “Oliver—keep him quiet, won’t you?”
“I’m hanged if you’re going to immortalize me,” began Justin.
“Why not Oliver?”
“Know you better.” She looked him up and down through
narrowed lids. “A little more round to the right, please. Talk to him,
Oliver.” And she settled herself to work.

You might also like