Fortran operations on multidimensional arrays - sum example [duplicate] - arrays

This question already has answers here:
Sum of a two dimensional array
(1 answer)
sum only on certain dimension
(1 answer)
Closed 4 years ago.
I am trying to figure how to do simple algebraic operations on a subset of elements in a multidimensional array and assign the result to another array with the same dimensions.
program hello
IMPLICIT NONE
REAL,DIMENSION(10,10,2,1) :: tmp1=2
REAL,DIMENSION(10,10,2,1) :: tmp2=1
INTEGER,DIMENSION(2) :: myind=(/1,2/)
This operations returns only one value
Print *, sum(tmp1(:,:,itree,:))
While this returns the correct results, however I would expect the same result than the second operation, maybe I am thinking in the R way.
Print *, tmp1(:,:,1,:)+tmp1(:,:,2,:)
end program Hello
How do I achieve the result of the second operation and assign it to another multidimensional array? Imagine my index is large so I can't type out each single term in the operation.

Related

How to make a string from byte subarray? [duplicate]

This question already has answers here:
How to get subslices?
(1 answer)
How do I convert a Vector of bytes (u8) to a string?
(5 answers)
Closed 1 year ago.
In Rust, given a string and a start and end byte offset – or, since it is possible to view a string as an array of bytes, a byte array and a start and end offset – what's the most efficient/idiomatic way to make another string from that slice?
I've got as far as finding String::from_utf8 which will take an entire byte array; is there an alternative function that can take a slice of a byte array? Or, is there a function that can extract part of a byte array, suitable for feeding as input to the above function? Or some other way to achieve the same goal?

Declaration of n-dimensional array [duplicate]

This question already has answers here:
Fortran: Choosing the rank of an allocatable array
(2 answers)
Dynamic array rank
(2 answers)
Set array's rank at runtime
(4 answers)
Closed 3 years ago.
Is there a way I can declare an array which will be able to allocate any number of dimensions (in any shape) later in the code? Something like a the classic deferred shape but bearing in mind I do not know the rank, shape or size during declaration. For example, something similar to
real, allocatable :: a(:)
integer, parameter :: sh = [4,2,2]
allocate(a(sh))
which does not throw an error (of course it does in this case).

Ruby: Compare if array contains other array [duplicate]

This question already has answers here:
How to determine if one array contains all elements of another array
(8 answers)
Closed 4 years ago.
how can i compare if an array of strings contains a smaller array of strings in Ruby?
e.g.
a=["1","2","3","4","5"]
b=["2","3"]
now i want to check if a contains b and get true/false
Thanks.
The most common approach would be to
(b - a).empty?
It has issues with unique elements, though. To detect whether a includes all elements from b, one should:
a_copy = a.dup
b.all? { |e| a_copy.delete e }
# or
b.all?(&a_copy.method(:delete))

Resizing a allocatable array [duplicate]

This question already has answers here:
Fortran increase dynamic array size in function
(3 answers)
Fortran array automatically growing when adding a value
(1 answer)
How to increase array size on-the-fly in Fortran?
(3 answers)
Closed 5 years ago.
I am trying to allocate an array and want to resize the array ie., grow the array size as and when required in the program.
My sample code looks like this
program main
implicit none
integer, allocatable, dimension(:)::test1
integer i, c1, c2
c1=10
c2=5
allocate(test1(1:c1))
! I basically want to do this
!allocate(test1(c1+1:c2))
end program main
How do I do this?

Replacing diagonal elements of square matrix without looping [duplicate]

This question already has answers here:
How to assign values to a MATLAB matrix on the diagonal?
(7 answers)
Closed 8 years ago.
I have a square matrix n x n & I also have a vector which is n x 1. I want to replace the diagonal elements with the values in my vector.
Is there a way of doing this in Matlab without looping?
matrix(1:n+1:end) = vector;
Explanation: if you use a single index into a matrix (that's called linear indexing), Matlab counts the elements down the first column, then second column etc. A step of n+1 thus defines the diagonal.

Resources