Skip to content

Commit 56b158b

Browse files
authored
Merge pull request #198 from silx-kit/opti-array-reloaded
Optimize ndarray uses in MappedVis
2 parents 4432a4a + ca157b6 commit 56b158b

File tree

4 files changed

+25
-5
lines changed

4 files changed

+25
-5
lines changed

package-lock.json

Lines changed: 8 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
"lodash-es": "^4.17.15",
4040
"nanoid": "^2.1.11",
4141
"ndarray": "^1.0.19",
42+
"ndarray-ops": "^1.2.2",
4243
"ndarray-unpack": "^1.0.0",
4344
"normalize.css": "^8.0.1",
4445
"react": "^16.13.1",

src/h5web/visualizations/shared/MappedVis.tsx

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import React, { ReactElement, useMemo, ElementType } from 'react';
22
import { isNumber } from 'lodash-es';
33
import ndarray from 'ndarray';
4-
import unpack from 'ndarray-unpack';
4+
import ops from 'ndarray-ops';
55
import type { DimensionMapping } from '../../dataset-visualizer/models';
66
import type { HDF5Dataset, HDF5SimpleShape } from '../../providers/models';
77

@@ -16,9 +16,11 @@ function MappedVis<T>(props: Props<T>): ReactElement {
1616
const { component: Component, dataset, value, mapperState } = props;
1717
const rawDims = (dataset.shape as HDF5SimpleShape).dims;
1818

19-
const dataArray = useMemo(() => {
20-
const baseArray = ndarray<T>(value.flat(Infinity) as T[], rawDims);
19+
const baseArray = useMemo(() => {
20+
return ndarray<T>(value.flat(Infinity) as T[], rawDims);
21+
}, [rawDims, value]);
2122

23+
const dataArray = useMemo(() => {
2224
if (mapperState === undefined) {
2325
return baseArray;
2426
}
@@ -32,8 +34,11 @@ function MappedVis<T>(props: Props<T>): ReactElement {
3234
const mappedView = isXBeforeY ? slicedView.transpose(1, 0) : slicedView;
3335

3436
// Create ndarray from mapped view so `dataArray.data` only contains values relevant to vis
35-
return ndarray<T>(unpack(mappedView).flat(), mappedView.shape);
36-
}, [value, rawDims, mapperState]);
37+
const mappedArray = ndarray<T>([], mappedView.shape);
38+
ops.assign(mappedArray, mappedView);
39+
40+
return mappedArray;
41+
}, [mapperState, baseArray]);
3742

3843
return <Component dataArray={dataArray} />;
3944
}

src/react-app-env.d.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,3 +8,9 @@ declare module 'ndarray-unpack' {
88

99
export = unpack;
1010
}
11+
12+
declare module 'ndarray-ops' {
13+
function assign(a: ndarray<T>, b: ndarray<T>);
14+
15+
export = { assign };
16+
}

0 commit comments

Comments
 (0)