NumPy Not Supported?

Good Morning Everyone,

I have a vision screen that will grab 5 points of data from a device and needs to do some number crunching. I am trying to use the code below for a best fit plane but it seems like NumPy is not recognized. Does anyone know how else this can be accomplished in Jython?

import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy as np

N_POINTS = 10
TARGET_X_SLOPE = 2
TARGET_y_SLOPE = 3
TARGET_OFFSET  = 5
EXTENTS = 5
NOISE = 5

# create random data
xs = [np.random.uniform(2*EXTENTS)-EXTENTS for i in range(N_POINTS)]
ys = [np.random.uniform(2*EXTENTS)-EXTENTS for i in range(N_POINTS)]
zs = []
for i in range(N_POINTS):
    zs.append(xs[i]*TARGET_X_SLOPE + \
              ys[i]*TARGET_y_SLOPE + \
              TARGET_OFFSET + np.random.normal(scale=NOISE))

# plot raw data
plt.figure()
ax = plt.subplot(111, projection='3d')
ax.scatter(xs, ys, zs, color='b')

# do fit
tmp_A = []
tmp_b = []
for i in range(len(xs)):
    tmp_A.append([xs[i], ys[i], 1])
    tmp_b.append(zs[i])
b = np.matrix(tmp_b).T
A = np.matrix(tmp_A)
fit = (A.T * A).I * A.T * b
errors = b - A * fit
residual = np.linalg.norm(errors)

print "solution:"
print "%f x + %f y + %f = z" % (fit[0], fit[1], fit[2])
print "errors:"
print errors
print "residual:"
print residual

Not supported. Numpy is really a C library with a python access API. C libraries cannot be loaded in jython because they cannot be loaded in java.

Some related topics:

If you're math saavy and depending on your Ignition version you can use the built in java math libraries to do matrix manipulations

You can use https://commons.apache.org/proper/commons-math/javadocs/api-3.6/index.html, check out the following thread

Note you won't be able to plot using matplotlib either. You will have to transform your results into an Ignition Dataset of some sort to feed to a chart component.

1 Like