[Tutor] Python 3.6 Multiply the elements of a 2D Array by the elements of a 1D Aeeay
Stephen P. Molnar
s.molnar at sbcglobal.net
Fri Apr 14 08:41:38 EDT 2017
On 04/14/2017 04:21 AM, Peter Otten wrote:
> Stephen P. Molnar wrote:
>
>> However, what I want to do is multiply each element ob D by each element
>> of s and sum all of the products.
>
> If you *really* want this:
>
> sum_of_all_products = s.sum() * D.sum()
>
> example:
>
> s = [a b c]
>
> D = [[a1 a2]
> [a3 a4]]
>
> a*a1 + a*a2 + a*a3 + a*a4 = a * D.sum()
>
> d := D.sum()
> a*d + b*d + c*d = s.sum() * d
>
> Even if that's what you want you should heed Steven's advice.
>
>
>
>
> _______________________________________________
> Tutor maillist - Tutor at python.org
> To unsubscribe or change subscription options:
> https://mail.python.org/mailman/listinfo/tutor
>
Thanks for the replies to my message.
First of all, allow me to apologize for the imprecise nature of my request.
Then I want t assure everyone that I am not asking someone else to write
a program for me, I am not a student with a homework problem.
Rather as I wrote in my email I am attempting to port a program from
FORTRAN to Python.
The equation that I a want to evaluate (the one that I programmed in
FORTRAN) is equation (7) in the attached scan of one of the pages of
Stephen P. Molnar and James W. King, Theory and Applications of the
Integrated Molecular Transform and the Normalized Molecular Moment
Structure Descriptors: QSAR and QSPR Paradigms, Int. J Quantum Chem.,
85, 662 (2001).
What I have managed to do so far is:
import numpy as np
import numpy, pandas, scipy.spatial.distance as dist
start=1
finish=31
points=300
s = np.linspace(start,finish,points) #300 points between 1.0 and 31.0
name = input("Enter Molecule ID: ")
name = str(name)
name_in = name+'.dat'
df = pandas.read_table(name_in, skiprows=2, sep=" ",
skipinitialspace=True)
mass_data = numpy.array(df["MASS"])
print('MASS = ',mass_data)
N = numpy.ma.size(mass_data)
a = numpy.array(df[["X", "Y", "Z"]])
dist.squareform(dist.pdist(a, "euclidean"))
anrows, ancols = np.shape(a)
a_new = a.reshape(anrows, 1, ancols)
diff = a_new - a
D = (diff ** 2).sum(2)
D = np.sqrt(D)
df = pandas.read_table(name_in, skiprows=2, sep=" ",
skipinitialspace=True)
mass_data = numpy.array(df["MASS"])
print('MASS = ',mass_data)
N = numpy.ma.size(mass_data)
a = numpy.array(df[["X", "Y", "Z"]])
dist.squareform(dist.pdist(a, "euclidean"))
anrows, ancols = np.shape(a)
a_new = a.reshape(anrows, 1, ancols)
diff = a_new - a
D = (diff ** 2).sum(2)
D = np.sqrt(D)
print(D)
for i in range(numpy.ma.size(mass_data)):
for j in range(0, N-1):
for k in range(j+1,N):
print(D[j,k])
np.savetxt('D(ij)',D,delimiter=' ')
for k in range(0, N-1):
for k in range(k+1,N):
A = (mass_data[j]*mass_data[k])
Now, the problem with which I am struggling is the evaluation of the s
times the r_sub_i_sub_j term. This should result in 300 floating point
numbers between 1.0 and 31.0.
I hope that I have eliminated the confusion at this point.
This is, of course, not the end point of my modeling, but what I feel is
an important result in QSAR studies.
I will be very appreciative of help at this point.
Thanks in advance.
--
Stephen P. Molnar, Ph.D. Life is a fuzzy set
www.molecular-modeling.net Stochastic and multivariate
(614)312-7528 (c)
Skype: smolnar1
More information about the Tutor
mailing list